xargs 命令上的大括号没有被替换

xargs 命令上的大括号没有被替换

我一直在尝试运行这个命令。然而,我得到了一些意想不到的结果。看来这是我的一个明显的忽视,但我无法弄清楚。

这是我尝试过的:

鉴于我在当前目录中有一个 file.txt:

find ./ -name *.txt -print0 | xargs --null -I {} echo {}

这成功返回:

./file.txt

但是,如果我修改它以回显到文件,如下所示:

find ./ -name *.txt -print0 | xargs --null -I {} echo 'some string' > {}.alt

结果不是我所期望的:

-rw-r--r-- 1 User 197121     5 Mar  5 20:33 {}
-rw-r--r-- 1 User 197121   908 Mar  5 04:32 file.txt

所需的输出是有一个file.txt.altsome string内容命名的文件。

如果有人可以伸出援手,我们将不胜感激。

答案1

shell 在管道运行之前设置重定向。相反,你可以使用类似的东西

find ./ -name '*.txt' -exec sh -c 'for f; do echo "some string" > "$f".alt; done' sh {} +

相关内容