如何使用find -exec切断部分文件扩展名

时间:2015-04-17 16:17:40

标签: linux find exec

我想使用“find”来重命名一堆文件,重命名只是删除部分扩展名。 例: abc.ext.DELAYED - > abc.ext

我尝试了以下内容,但它们根本不起作用:

find . -name *.DELAYED -execdir mv {} $(echo {} | sed 's:\.DELAYED::') \;
find . -name *.DELAYED -execdir mv {} $(echo {} | cut -f 1 -d".") \;

2 个答案:

答案 0 :(得分:1)

您已使用“linux”专门标记了此问题,因此我假设您的发行版安装了重命名工具,该工具捆绑在util-linux软件包中。

这可以避免命令替换问题并链接多个程序:

find . -name '*.DELAYED' -execdir rename .DELAYED '' {} \;

答案 1 :(得分:0)

您的命令有两个问题。

第一个问题是命令中的*。您需要将其括在一个字符串中,否则bash会将其扩展为glob表达式 - *扩展为当前文件夹中的所有文件。

该命令应如下所示:

find . -name '*.DELAYED' ...

第二个问题是命令替换发生在命令执行之前

$(echo {})

将与文字{}相提并论会导致像

这样的命令
mv file1 file1

您可以在shell中执行命令:

... -execdir bash -c 'mv {} $(echo {} | cut -f2 -d.)' \;