Это довольно просто, у меня есть папка с несколькими подпапками файлов JS, и я хочу запустить компилятор Google Clojure для всех файлов в этих папках. Команда для обработки одного файла выглядит следующим образом:
java -jar compiler.jar --js filename.js --js_output_file newfilename.js
Как я могу изменить это для запуска на каждом файле JS в моей структуре каталогов?
mv
файл - в исходное имя.find -name '*.js' | while read jsfile; do java -jar compiler.jar --js "$jsfile" --js_output_file "new$jsfile" && mv "new$jsfile" "$jsfile"; done
сделайте свое дело.find -exec
отлично подходит для простых команд. для сложныхfind | xargs
гораздо лучше, а также позволяет выполнять команды параллельно.xargs
лучше?Вы также можете использовать простой
for
цикл, особенно если файлы находятся в одном каталоге (без подкаталогов). Его также можно модифицировать для работы с подкаталогами.Без рекурсии:
или в качестве эквивалентной однострочной:
Чтобы перейти в подкаталоги (требуется GNU bash 4.0 или новее) (спасибо @ChrisDown ):
источник
globstar
для этого.**
может соответствовать произвольному уровню рекурсии,**/*.js
работает: sprunge.us/PXQKfor f in ./*.js; do
илиfor f in ./**/*.js; do
для того, чтобы защитить себя от имен файлов, начинающихся с-
(я не знаю, если это необходимо в этом случае, но это хорошая привычка в любом случае).