如何使用查找 -exec 砍掉文件扩展名的一部分



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

我已经尝试了以下方法,但它们根本不起作用:

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

您的命令有两个问题。

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

该命令应如下所示:

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

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

,这意味着
$(echo {})

将扩展到字面{}意志将导致这样的命令

mv file1 file1

您可以改为在 shell 中执行命令:

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

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

这避免了命令替换问题和链接多个程序:

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

相关内容

  • 没有找到相关文章

最新更新