Dies ist ziemlich einfach. Ich habe einen Ordner mit mehreren Unterordnern von JS-Dateien und möchte den Clojure-Compiler von Google für alle Dateien in diesen Ordnern ausführen. Der Befehl zum Verarbeiten einer einzelnen Datei lautet wie folgt:
java -jar compiler.jar --js filename.js --js_output_file newfilename.js
Wie ändere ich dies, um es auf jeder JS-Datei in meiner Verzeichnisstruktur auszuführen?
mv
die Datei in den ursprünglichen Namen schreibt .find -name '*.js' | while read jsfile; do java -jar compiler.jar --js "$jsfile" --js_output_file "new$jsfile" && mv "new$jsfile" "$jsfile"; done
sollten Sie dies tun.find -exec
ist ideal für einfache Befehle. für komplexefind | xargs
ist viel besser und es ermöglicht auch, Befehle parallel auszuführen.xargs
ist besser?Sie können auch eine einfache
for
Schleife verwenden, insbesondere wenn sich die Dateien in einem einzelnen Verzeichnis befinden (keine Unterverzeichnisse). Es kann geändert werden, um auch mit Unterverzeichnissen zu arbeiten.Ohne Rekursion:
oder als gleichwertiger Einzeiler:
Um in Unterverzeichnisse zurückzukehren (erfordert GNU Bash 4.0 oder neuer) (danke @ChrisDown ):
quelle
globstar
tun.**
kann eine beliebige Ebene der Rekursion entsprechen,**/*.js
funktioniert: sprunge.us/PXQKfor f in ./*.js; do
oderfor f in ./**/*.js; do
um sich vor Dateinamen zu schützen, die mit a beginnen-
(ich weiß nicht, ob dies in diesem Fall notwendig ist, aber es ist trotzdem eine gute Angewohnheit).