warum findet man das nicht? -name '* .jar' | xargs jar tf` Arbeit? - Xargs, Glas

Ich habe das ausgef├╝hrt

find . -name "*.jar" | xargs jar tf

Ich hoffe, es w├╝rde alles finden .jar Dateien und ausf├╝hren jar tf auf ihnen (um den Inhalt anzuzeigen). Aber es schien nicht zu funktionieren !!!

Antworten:

2 f├╝r Antwort Ôäľ 1

Sie verwenden xargs und jar tf der falsche Weg.

Der urspr├╝ngliche Zweck von xargs ist zu bestehen so viele Dateien wie m├Âglich auf einmal - so landen Sie mit ein paar jar tf file1 file2 file3 file4 ... file200 ... Anrufungen.

Aber jar t, ├Ąhnlich wie tar t, akzeptiert nur einer JAR-Datei auf einmal. Alle ├╝brigen Argumente wirken als Filter wof├╝r auflisten / extrahieren. Beispielsweise, jar tf thing.jar org/example w├╝rde nur Dateien aus dem Unterverzeichnis "org / example" auflisten.

Also, wenn du rennst jar tf file1.jar file2.jar file3.jar, es liest nur file1.jarund erwartet, dass der Rest mit den Dateien ├╝bereinstimmt innerhalb das Archiv.

Also m├╝ssen Sie stattdessen sagen xargs um den Befehl auszuf├╝hren einmal pro Datei:

find ... | xargs -d "n" -n 1 jar tf

(Das -d "n" Option hat nichts mit Ihrem Problem zu tun, aber es ist trotzdem eine gute Idee - nur f├╝r den Fall, dass Sie einige Dateien mit Leerzeichen im Namen finden.)

Eine direktere M├Âglichkeit, dasselbe zu tun, ist:

find ... -exec jar tf {} ;

Lies jetzt