是否可以更改在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 \;
答案 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
。