回答:
使用できます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で始まるファイルから保護することは、一般的には良い考え-
です(この場合、それが必要かどうかはわかりませんが、とにかく良い習慣です)。