更改{}查找exec的参数

时间:2014-05-13 08:59:44

标签: find exec

是否可以更改在find中传递给exec的参数? 例如,我需要以不同的名称复制文件:* .txt - > * .new.txt 现在我正在为两个命令做这件事:

find /root/test -name "*.txt" -exec cp {} {}.new \;
find /root/test -name "*.txt.new" -exec rename .txt.new .new.txt {} \;

是否可以解析{}来访问文件扩展名?像(我完全不知道)的东西:

-exec cp {} {$1}.new.txt \;

1 个答案:

答案 0 :(得分:1)

我不确定是否可以完全按照你的要求进行操作,但使用shell对参数进行这种修改当然是可能的:

find /root/test -name "*.txt" -exec sh -c 'cp "$0" "${0%.txt}.new.txt"' "{}" \;

我会尝试将其分解,以便更容易理解:

-exec sh -c '<...>' "{}" \;

这将启动一个新shell,它执行单引号中指定的脚本。另请注意,"{}"是发送到此脚本的参数,将在该脚本中以$0的形式提供。

对于脚本本身,$0是匹配的文本文件,我们将其复制到${0%.txt}.new.txt,其中包含文件名($0),并修剪匹配的第一个文本来自文件名的 END .txt,为我们留下了没有扩展名的文件名。然后我们只需附加新文件名.new.txt

作为附录,根据您的系统情况,您可能会收到“替换错误”消息(我在Mint安装上获得此信息,但在我的CentOS安装中没有)。如果您这样做,请尝试将-exec sh更改为-exec bash