我想使用“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".") \;
答案 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.)' \;