特定のフォルダdir1のファイルを処理する方法を知りたいです(さまざまなタスクを介してパイプされる場合)。最後に、出力が同じフォルダ構造とファイル名に書き込まれることを望みます。つまり、ファイルが2つあるとします。dir1/file1
そしてdir1/file2
。私は次のコマンドが欲しい:
task1 dir1/* | task2 | task3 --output dir2/${filename}
Output dir2/file1
-dir2/file2
処理されたファイルを表す必要があります。
ベストアンサー1
file のファイルを繰り返しdir1
、各ファイルの基本名を取得して処理し、出力ファイルに書き込みます。
for path in dir1/*; do
name="${path##*/}"
task1 "$path" | task2 | task3 --output "dir2/$name"
done
変数置換は${path##*/}
変数の値を使用して、path
最後の変数まですべてを削除します/
。これにより、ファイルのデフォルト名が生成されます。
task1
その後、ファイルが実行され、dir1
結果がに渡され、task2
その出力がに提供されますtask3
。最後の操作はdir2/$name
そのスイッチのオペランドとして使用されます--output
。ここでは$name
パスがないファイル名です$path
。