当管道的结果不是下一个命令中的最后一个参数时该怎么办

当管道的结果不是下一个命令中的最后一个参数时该怎么办

下面的示例显示了我想要执行的操作,即从上一个管道中获取结果并将其放入下一个命令的中间(我编写的位置$RESULT_FROM_FIND_COMMAND)。

$ find . -name "*0.01*txt" | cp $RESULT_FROM_FIND_COMMAND $(awk '{{split($1,a,"/")} {print a[3]"_"a[4]"_"a[5]}}')

我必须使用什么变量或命令才能实现此目的?

如果重要的话我正在使用 bash。

诗。请注意,awk 还应该将 find 的结果作为输入。

答案1

在这种情况下,使用 shell 进行迭代

find . -name "*0.01*txt" | while IFS= read -r filename; do
    newname=$(awk '{split($1,a,"/"), print a[3]"_"a[4]"_"a[5]}' <<< "$filename")"
    cp "$filename" "$newname"
done

一般来说,xargs 很有帮助:

find .... -print0 | xargs -o -I FILE someCommand arg1 FILE arg3 FILE

相关内容