我有一堆名为“something_12345.doc”的文件(任何 5 位数字,不一定是 12345)。我需要将它们全部重命名为“something.doc”。这是一个 Unix 文件系统,我怀疑有一种方法可以只用一个命令来做到这一点……任何 Unix 正则表达式专家可以帮忙吗?
谢谢!
我有一堆名为“something_12345.doc”的文件(任何 5 位数字,不一定是 12345)。我需要将它们全部重命名为“something.doc”。这是一个 Unix 文件系统,我怀疑有一种方法可以只用一个命令来做到这一点……任何 Unix 正则表达式专家可以帮忙吗?
谢谢!
This question was asked a lot of times on SO:
My personal preference goes to mmv. But see "Mass Rename/copy/link Tools".
@OP,shell 已经为您扩展了您的模式,在您的 mv 语句中,您不必再次指定 5 位数字的模式。
for file in *_[0-9][0-9][0-9][0-9][0-9].doc
do
echo mv "$file" "${file%_*}.doc"
done
rename 's/_[0-9][0-9][0-9][0-9][0-9]//' *.doc
使用 sed
ls *.doc | sed 's:\([^0-9_]\)[0-9_][0-9_]*\.doc:$(mv & \1.doc)' | /bin/bash
是的,rename
采用 perl 风格的正则表达式。做一个man rename
。
在 FreeBSD 上,您可能对 sysutils/renameutils 端口感兴趣。该命令qmv
将打开您的 $EDITOR 并允许您在相当舒适的环境中指定所有文件重命名。我个人更喜欢qmv -fdo
(单列)格式。