Ash*_*ley 3 command-line bash shell-script
我想知道如何处理来自某个文件夹 dir1 的文件,如果它们通过各种任务进行管道传输,最后我希望输出以相同的文件夹结构和文件名写入,即说我有 2 个文件;dir1/file1
和dir1/file2
。我想要以下命令:
task1 dir1/* | task2 | task3 --output dir2/${filename}
Run Code Online (Sandbox Code Playgroud)
输出dir2/file1
,dir2/file2
哪个应该代表处理过的文件。
遍历 中的文件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
。