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

487
One Two Three

Ich bin das gelaufen

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

in der hoffnung, alle .jardateien finden und ausführen jar tf(um den inhalt anzuzeigen). Aber es schien nicht zu funktionieren !!!

3
Was passiert, wenn du es versuchst? Paul vor 8 Jahren 0
Es gibt einfach nichts zurück (druckt nichts auf der Konsole) One Two Three vor 8 Jahren 0

1 Antwort auf die Frage

2
grawity

Du verwendest xargsund jar tfden falschen Weg.

Der ursprüngliche Zweck von xargsist, so viele Dateien wie möglich auf einmal zu übergeben - so dass Sie ein paar jar tf file1 file2 file3 file4 ... file200 ...Aufrufe haben.

Aber jar tso ähnlich tar t, akzeptiert nur eine .jar-Datei gleichzeitig. Alle übrigen Argumente dienen als Filter für das Auflisten / Extrahieren. Beispielsweise jar tf thing.jar org/examplewürden nur Dateien aus dem Unterverzeichnis "org / example" aufgelistet.

Wenn Sie es ausführen jar tf file1.jar file2.jar file3.jar, liest es nur file1.jar und erwartet, dass der Rest mit den Dateien im Archiv übereinstimmt .

Stattdessen müssen Sie xargsden Befehl einmal pro Datei ausführen lassen :

find ... | xargs -d '\n' -n 1 jar tf 

(Die -d '\n'Option hat nichts mit Ihrem Problem zu tun, ist aber trotzdem eine gute Idee - nur für den Fall, dass Sie einige Dateien mit Leerzeichen im Namen finden.)

Ein direkterer Weg, das Gleiche zu tun, ist:

find ... -exec jar tf {} \; 
Das `-d`-Ding ist unnötig, weil es einen noch besseren Weg gibt: Verwenden Sie` -print0` für `find` und` -0` für `xargs`. Daniel B vor 8 Jahren 0