我想使用"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 '' {} ;