我想在 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
答案4
如果您有以下mmv
包:
mmv '*-0.png' '#1.png'
与(最新版本的)一样rename
,这将采取合理的措施以避免覆盖现有文件。