如何使用正则表达式重命名很多文件?


20

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

我的文件具有“ T452-102456-0.png”之类的名称,我想删除“ -0”部分。我知道我可以通过编写自己的php-cli脚本来执行此操作,但是我想知道一个更简单,更快速的解决方案。


在“很多pdf文件”和“我的文件具有“ T452-102456-0.png”之类的名称之间”是否存在逻辑矛盾?
manatwork 2011年

哦...文件的类型无关紧要,但确实是^^。我编辑,谢谢您的评论=)
Raphaël

Answers:


21

Bash或Ksh mv可以解决它:

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

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

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

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

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

它完美地工作。非常感谢=)
Raphaël

3

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

使用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' _ {} +

安装zsh的另一个重要原因:).... zmv
danidee


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.