複数のファイルに対してコマンドを実行する方法

複数のファイルに対してコマンドを実行する方法

これは非常に基本的です。 JSファイルのサブフォルダが複数あるフォルダがあり、そのフォルダ内のすべてのファイルに対してGoogleのClojureコンパイラを実行したいと思います。単一ファイルを処理するコマンドは次のとおりです。

java -jar compiler.jar --js filename.js --js_output_file newfilename.js

ディレクトリ構造内のすべてのJSファイルで実行されるようにどのように変更できますか?

答え1

あなたはそれを使用することができますfind

find . -name "*.js" -exec java -jar compiler.jar --js {} --js_output_file new{} \;

答え2

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以降が必要です)(ありがとう。@クリスタン):

shopt -s globstar
for filename in ./**/*.js; do
    java -jar compiler.jar --js "${filename}" --js_output_file "new${filename}"
done

関連情報