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

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

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

task1 dir1/* | task2 | task3 --output dir2/${filename}

输出dir2/file1dir2/file2它应该代表已处理的文件。

答案1

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

for path in dir1/*; do
    name="${path##*/}"
    task1 "$path" | task2 | task3 --output "dir2/$name"
done

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

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

答案2

cd "dir1" && \
find . -maxdepth 1 -type f -exec sh -c '
   # task2 on "$1" | task3  > "/path/to/dir2/${1##*/}
' {} {} \;

相关内容