web-dev-qa-db-ja.com

複数のファイルでコマンドを実行する方法

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

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

これを変更して、ディレクトリ構造内のすべてのJSファイルで実行するにはどうすればよいですか?

13
Mataniko

findを使用できます:

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

単純な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
7
a CVn