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

Rap*_*aël 20 rename files

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

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

man*_*ork 21

Bash 或 Ksh 一起mv可以解决它:

for f in *.png; do mv -n "$f" "${f/-0}"; done
Run Code Online (Sandbox Code Playgroud)

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

for f in *.png; do mv -n "$f" "${f/-0./.}"; done
Run Code Online (Sandbox Code Playgroud)

但是由于重命名规则很简单,如果您renameutil-linux包中获得,也可以这样做:

rename '-0.' '.' *.png
Run Code Online (Sandbox Code Playgroud)


Gil*_*il' 5

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

使用 zsh:

autoload zmv
zmv '(*)-0(.png)' '$1$2'
Run Code Online (Sandbox Code Playgroud)

与其他贝壳:

for x in *-0.png; do mv -- "$x" "${x%-0.*}.png"; done
Run Code Online (Sandbox Code Playgroud)


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

使用 zsh:

zmv '(**/)(*)-0(.png)' '$1$2$3'
Run Code Online (Sandbox Code Playgroud)

使用 ksh93:

set -o globstar
for x in **/*-0.png; do mv -- "$x" "${x%-0.*}.png"; done
Run Code Online (Sandbox Code Playgroud)

使用 bash ?4,同上,但使用shopt -s globstar代替set命令。

与其他贝壳:

find -name '*-0.png' -exec sh -c 'for x; do mv -- "$x" "${x%-0.*}.png"; done' _ {} +
Run Code Online (Sandbox Code Playgroud)