Можно использовать find
:
find . -name "*.js" -exec java -jar compiler.jar --js {} --js_output_file new{} \;
Можно также использовать простое for
цикл, особенно если файлы в рамках единственного каталога (никакие подкаталоги). Это может быть изменено для работы с подкаталогами также.
Без рекурсии:
for filename in ./*.js
do
java -jar compiler.jar --js "${filename}" --js_output_file "new${filename}"
done
или как эквивалентная острота:
for filename in ./*.js; do java -jar compiler.jar --js "${filename}" --js_output_file "new${filename}"; done
Для рекурсивного вызова в подкаталоги (требует, GNU колотит 4.0, или более новый) (благодарит @ChrisDown):
shopt -s globstar
for filename in ./**/*.js; do
java -jar compiler.jar --js "${filename}" --js_output_file "new${filename}"
done
globstar
сделать так.
– Chris Down
27.06.2013, 10:58
**
может соответствовать произвольному уровню рекурсии, **/*.js
работы: sprunge.us/PXQK
– Chris Down
27.06.2013, 12:02
for f in ./*.js; do
или for f in ./**/*.js; do
для защиты себя от имен файлов, начинающихся a -
(Я не знаю, необходимо ли это в этом случае, но это - хорошая привычка так или иначе). настройки
– evilsoup
27.06.2013, 19:01
mv
файл к настоящему имени. – Anthon 27.06.2013, 11:07find -name '*.js' | while read jsfile; do java -jar compiler.jar --js "$jsfile" --js_output_file "new$jsfile" && mv "new$jsfile" "$jsfile"; done
должен добиться цели. – David Baggerman 27.06.2013, 11:17find -exec
является большим для простых команд. для сложныхfind | xargs
намного лучше, и также это позволяет командам выполнения параллельно. – rush 27.06.2013, 11:22xargs
лучше? – Mel Boyce 27.06.2013, 15:39