
Ich habe also ein Skript, das über Zip-Dateien iteriert, deren Inhalt mit unzip -l $filename auflistet und nach Übereinstimmungen mit pattern sucht. (.*)report.xml
In diesem Fall ergibt das test0\report.xml
Aber wenn ich versuche, es mit zu entpacken unzip -j $filename
, erhalte ichcaution: filename not matched: test0\report.xml
Ich habe angehalten und es manuell mit einer Datei versucht, die Folgendes auflistet:
7285 2018-05-04 13:34 test0\report.xml
Dann tun
unzip -j 2747693b-7027-44d3-98f4-a01f1ed139cf.zip test0\report.xml
Gibt mir den Fehlercaution: filename not matched: test0report.xml
Ich habe versucht, mit aufzurufen, \\
um es zu umgehen, dann derselbe Fehler, aber mit der Meldung test0\report.xml
stattdessen.
Ich habe alles versucht, z. B. \, oder /, oder //, daher glaube ich nicht, dass es sich hier um ein Problem mit dem Backward Slash-Escape handelt.
Bitte helfen Sie.
Antwort1
Ich habe das Problem in meinem Kubuntu nachgestellt. Der Dateiname war wörtlich test0\report.xml
und als ich das tat
unzip -j foo.zip test0\\report.xml
unzip
zurückgegeben filename not matched: test0\report.xml
, obwohl die erhaltene Zeichenfolge meiner Meinung nach übereinstimmen sollte.
Das Tool unterstützt einige Platzhalter. Ich konnte die Datei mit diesem Befehl entpacken:
unzip -j foo.zip 'test0?report.xml'
Ein Fehler? Ich schätze, Sie müssen Ihrem Skript eine Logik hinzufügen oder es einfach manuell entpacken, wenn eine solche (hoffentlich seltene) Situation erneut auftritt. Oder nutzen Sie diese von unterstützten Platzhalter unzip
und lassen Sie sie die Arbeit erledigen, anstatt sie (.*)report.xml
im Skript abzugleichen unzip
:
unzip -j foo.zip '*report.xml'