入力と同じ名前のファイルに出力を書き込むにはどうすればよいですか?

入力と同じ名前のファイルに出力を書き込むにはどうすればよいですか?

特定のフォルダ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

おすすめ記事