2017-05-20 7 views
1

ルートフォルダから特定の拡張子を持つすべてのファイルに影響を与えるコマンドを再帰的に実行します。bashの特定の拡張子を持つファイルに対してコマンドを再帰的に実行するには?

は、ここで私はの.blend拡張子を持つすべてのファイルに対して、このコマンドを実行するコマンド

blender b03.blend --background --python myScript.py 

代わりのb03.blendファイルです。

+0

GNU 'find'とその動作' -exec command; 'を見てみることをお勧めします。 – Cyrus

答えて

2

試してみてください。

find . -name '*.blend' -exec blender {} --background --python myScript.py \; 

説明:

  • find*.blend一致するすべてのファイル - あなたのシェルは、現在のディレクトリ内のファイルのためにこれを拡張しないように、単一引用符を使用することが重要です
  • 見つかったファイルごとにblender {} --background --python myScript.pyを実行します。 {}がファイル名に置き換えられます(例:some/sub/tree/file.blend)。
  • \;は、-execステートメントを終了します。 \;をエスケープするために使用されるため、シェルはそれを吸収せずに複数のコマンドに分割します。
  • blenderのすべてのインスタンスは*.blendファイル(複数可)の隣にならないようにblenderが正しく「ここ」ではありませんファイルを処理できる必要があり、初期の作業ディレクトリから実行、および均等myScript.pyにアクセスします。

:私はblendに慣れていないんだけど、それがバックグラウンドに行くと(原因--backgroundに)処理に時間がかかります場合は、あなたがあなたのマシンを圧倒して...あなたが好むかもしれません一度に1つのファイルを処理するか、ジョブを連続して実行できる独立したジョブ(各アイテムを完了するまで)に分割することができます...ボーナスポイントの場合は、制限を処理しながら同時に簡単な操作を実行できるmake (例:make -j 8は最大で8個のコマンドを同時に実行します)。

関連する問題