2010-01-28 142 views
1

我有一堆名为'something_12345.doc'(任何5位数字,不一定是12345)的文件。我需要将它们全部重命名为“something.doc”。这是一个Unix文件系统,我怀疑只有一个命令就可以做到这一点...任何Unix正则表达式guru都可以帮忙吗?如何快速重命名文件夹中的一堆文件

谢谢!

+3

你将剩下一个文件,基本上,你正在删除N-1文件并将第N个文件复制到'something.doc' - 这是你想要的吗? – dirkgently 2010-01-28 18:29:04

+0

-1因为经常问*。你应该首先在SO上进行搜索。 – bortzmeyer 2010-01-30 21:30:50

回答

0

是的,rename采用Perl风格的正则表达式。做一个man rename

+0

并非总是如此。在RH系统上,它做了一个简单的字符串替换。 – 2010-01-30 22:38:49

2

rename 's/_[0-9][0-9][0-9][0-9][0-9]//' *.doc

+0

我在FreeBSD上,因此这并不会工作。 庆典:在/ usr/local/bin中/重命名:参数列表太长 我无法弄清楚如何设置变量命名 – user261231 2010-01-28 21:34:44

+0

想通了。 for i in [A-Za-z] * _ [0-9] [0-9] [0-9] [0-9] [0-9] .doc; do mv“$ i”“$ {i/_ [0-9] [0-9] [0-9] [0-9] [0-9]}”;完成 – user261231 2010-01-28 22:14:04

3

@OP,外壳已经出现在你的MV声明扩展你的模式为你,你不必再指定5位数字的模式。

for file in *_[0-9][0-9][0-9][0-9][0-9].doc 
do 
    echo mv "$file" "${file%_*}.doc" 
done 
+0

感谢ghostdog74和其他人! – user261231 2010-01-29 06:25:00

1

用sed

ls *.doc | sed 's:\([^0-9_]\)[0-9_][0-9_]*\.doc:$(mv & \1.doc)' | /bin/bash 
0

在FreeBSD上,你可能有兴趣在sysutils的/ renameutils端口。命令qmv打开$ EDITOR并允许您在合理舒适的环境中指定所有文件重命名。我个人更喜欢qmv -fdo(单列)格式。