Linux
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.alt
作為some string
內容。如果有人可以伸出援助之手,那將不勝感激。
shell 在您的管道執行之前設置重定向。相反,您可以使用類似的東西
find ./ -name '*.txt' -exec sh -c 'for f; do echo "some string" > "$f".alt; done' sh {} +