Ini cukup mendasar, saya memiliki folder dengan beberapa subfolder file JS dan saya ingin menjalankan kompiler Clojure Google pada semua file di folder tersebut. Perintah untuk memproses satu file adalah sebagai berikut:
java -jar compiler.jar --js filename.js --js_output_file newfilename.js
Bagaimana cara memodifikasi ini untuk dijalankan pada setiap file JS dalam struktur direktori saya?
mv
file ke nama asli.find -name '*.js' | while read jsfile; do java -jar compiler.jar --js "$jsfile" --js_output_file "new$jsfile" && mv "new$jsfile" "$jsfile"; done
lakukan triknya.find -exec
sangat bagus untuk perintah sederhana. untuk yang kompleksfind | xargs
jauh lebih baik dan juga memungkinkan untuk menjalankan perintah secara paralel.xargs
lebih baik?Anda juga dapat menggunakan
for
loop sederhana , terutama jika file berada dalam satu direktori (tidak ada subdirektori). Itu dapat dimodifikasi untuk bekerja dengan subdirektori juga.Tanpa rekursi:
atau sebagai satu-baris yang setara:
Untuk kembali ke subdirektori (memerlukan GNU bash 4.0 atau yang lebih baru) (terima kasih @ChrisDown ):
sumber
globstar
untuk melakukannya.**
dapat menyamai tingkat rekursi yang berubah-ubah,**/*.js
berfungsi: sprunge.us/PXQKfor f in ./*.js; do
ataufor f in ./**/*.js; do
untuk melindungi diri Anda dari nama file yang dimulai dengan-
(Saya tidak tahu apakah itu perlu dalam kasus ini, tapi itu kebiasaan yang baik).