如何使用正则表达式重命名大量文件?

如何使用正则表达式重命名大量文件?

我想在 Mac OS X (10.7.2) 上重命名很多文件。我没有该rename命令的 perl 包。

我的文件的名称类似于“T452-102456-0.png”,我想删除“-0”部分。我知道我可以通过编写自己的 php-cli 脚本来完成此操作,但我想知道更简单、更快的解决方案。

答案1

结合使用 Bash 或 Kshmv可以解决此问题:

for f in *.png; do mv -n "$f" "${f/-0}"; done

如果文件名在第一个破折号后也可能有“0”,并且“-0”始终位于点前面,您可能也希望在表达式中包含该点:

for f in *.png; do mv -n "$f" "${f/-0./.}"; done

但由于重命名规则很简单,如果您rename实用程序Linux包,也可以做到这一点:

rename '-0.' '.' *.png

答案2

简单方法:仅当前目录中的文件

使用 zsh:

autoload zmv
zmv '(*)-0(.png)' '$1$2'

与其他外壳:

for x in *-0.png; do mv -- "$x" "${x%-0.*}.png"; done


增强方法:当前目录和/或子目录中的文件

使用 zsh:

zmv '(**/)(*)-0(.png)' '$1$2$3'

使用 ksh93:

set -o globstar
for x in **/*-0.png; do mv -- "$x" "${x%-0.*}.png"; done

对于 bash ≥4,如上所述,但使用shopt -s globstar而不是set命令。

与其他外壳:

find -name '*-0.png' -exec sh -c 'for x; do mv -- "$x" "${x%-0.*}.png"; done' _ {} +

答案3

在 OSX 上的 Fish Shell 中:

for f in *.png; mv -n $f (basename $f -0.png).png; end

鱼壳:https://fishshell.com/

答案4

如果您有以下mmv包:

mmv '*-0.png' '#1.png'

与(最新版本的)一样rename,这将采取合理的措施以避免覆盖现有文件。

相关内容