当我使用时,xargs
有时我不需要显式使用替换字符串:
find . -name "*.txt" | xargs rm -rf
在其他情况下,我想指定替换字符串以执行以下操作:
find . -name "*.txt" | xargs -I '{}' mv '{}' /foo/'{}'.bar
上一个命令会将当前目录下的所有文本文件移动到/foo
其中,并将扩展名附加bar
到所有文件中。
如果我不想将一些文本附加到替换字符串,而是想修改该字符串,以便可以在文件的名称和扩展名之间插入一些文本,我该怎么做?例如,假设我想做与上一个示例相同的操作,但文件应该重命名/从<name>.txt
to /foo/<name>.bar.txt
(而不是/foo/<name>.txt.bar
)移动。
更新:我设法找到解决方案:
find . -name "*.txt" | xargs -I{} \
sh -c 'base=$(basename $1) ; name=${base%.*} ; ext=${base##*.} ; \
mv "$1" "foo/${name}.bar.${ext}"' -- {}
但我想知道是否有更短/更好的解决方案。