如何将输出写入与输入同名的文件?

Ash*_*ley 3 command-line bash shell-script

我想知道如何处理来自某个文件夹 dir1 的文件,如果它们通过各种任务进行管道传输,最后我希望输出以相同的文件夹结构和文件名写入,即说我有 2 个文件;dir1/file1dir1/file2。我想要以下命令:

task1 dir1/* | task2 | task3 --output dir2/${filename}
Run Code Online (Sandbox Code Playgroud)

输出dir2/file1dir2/file2哪个应该代表处理过的文件。

Kus*_*nda 5

遍历 中的文件dir1,获取每个文件的基本名称,处理它,写入输出文件:

for path in dir1/*; do
    name="${path##*/}"
    task1 "$path" | task2 | task3 --output "dir2/$name"
done
Run Code Online (Sandbox Code Playgroud)

变量替换${path##*/}将获取变量的值path并删除直到(并包括)最后一个/. 这将生成文件的基本名称。

task1然后对文件 in 执行dir1,结果传递给 ,task2并将其输出提供给task3。最后一个任务dir2/$name用作其--output开关的操作数,其中$name是不带路径的文件名$path