Linux

xargs 命令上的大括號沒有被替換

  • March 6, 2020

我一直在嘗試執行這個命令。但是,我得到了一些相當出乎意料的結果。這似乎是我的一個明顯的忽視,但我無法弄清楚。

這是我嘗試過的:

鑑於我在目前目錄中有一個 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.alt作為some string內容。

如果有人可以伸出援助之手,那將不勝感激。

shell 在您的管道執行之前設置重定向。相反,您可以使用類似的東西

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

引用自:https://unix.stackexchange.com/questions/571434