回答:
使用できますfind:
find . -name "*.js" -exec java -jar compiler.jar --js {} --js_output_file new{} \;
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特にファイルが単一のディレクトリ内にある場合(サブディレクトリなし)、単純なループを使用することもできます。サブディレクトリでも機能するように変更できます。
再帰なし:
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 bash 4.0以降が必要)(@ChrisDownに感謝):
shopt -s globstar
for filename in ./**/*.js; do
java -jar compiler.jar --js "${filename}" --js_output_file "new${filename}"
done
globstarと、そうすることができます。
for f in ./*.js; doかfor f in ./**/*.js; do、ファイル名をaで始まるファイルから保護することは、一般的には良い考え-です(この場合、それが必要かどうかはわかりませんが、とにかく良い習慣です)。