1

我有一堆名为“something_12345.doc”的文件(任何 5 位数字,不一定是 12345)。我需要将它们全部重命名为“something.doc”。这是一个 Unix 文件系统,我怀疑有一种方法可以只用一个命令来做到这一点……任何 Unix 正则表达式专家可以帮忙吗?

谢谢!

4

6 回答 6

3

@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
于 2010-01-29T00:08:35.943 回答
2

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

于 2010-01-28T18:34:11.117 回答
1

使用 sed

ls *.doc | sed 's:\([^0-9_]\)[0-9_][0-9_]*\.doc:$(mv & \1.doc)' | /bin/bash
于 2013-02-17T08:02:16.953 回答
0

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

于 2010-01-28T18:27:50.150 回答
0

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

于 2016-01-16T08:51:20.570 回答