从命令行递归更改多个文件的重复扩展名

从命令行递归更改多个文件的重复扩展名

我的问题几乎与那些但是,它的解决方案对我的情况不起作用。我想删除重复的扩展名(在我的情况下.zip.zip),只保留一个(即.zip)。我试过了:

rename 's/.zip/.zip$/.zip/' *.zip.zip

find . -depth -name "*.zip.zip" -exec rename 's/\.zip\.zip$/.zip/' {} +

但在两种情况下均未重命名文件。

答案1

使用 globstar 和 rename 递归重命名文件:

$ shopt -s globstar; rename 's/\.zip$//' **/*.zip.zip

使用 mmv 重命名文件:

$ mmv ';*.zip.zip' '#1#2.zip'
       12            ^ ^
  • ;匹配目录树中任意深度的文件。
  • *匹配任意字符零次或多次。
  • #对 from 模式中的第 n 个通配符的引用。

答案2

下面的方法就成功了。

find . -depth -name "*.zip.zip" -exec sh -c 'mv "$1" "${1%.zip.zip}.zip"' _ {} \;

相关内容