如何快速重命名文件夹中的一堆文件

Posted

技术标签:

【中文标题】如何快速重命名文件夹中的一堆文件【英文标题】:How to quickly rename a bunch of files in the folder 【发布时间】:2011-01-10 12:59:59 【问题描述】:

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

谢谢!

【问题讨论】:

你将只剩下一个文件,基本上,你正在删除 N-1 个文件并将第 N 个文件复制到 something.doc -- 这是你想要的吗? -1 因为被问经常。您应该先搜索 SO。 【参考方案1】:

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

【讨论】:

【参考方案2】:

使用 sed

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

【讨论】:

【参考方案3】:

这个问题在 SO 上被问了 很多 次:

bash script to rename all files in a directory? bash Linux - Massive folder rename How to do a mass rename? https://***.com/questions/7137/replacing-one-string-in-a-bunch-of-file-names-with-another

我的个人偏好是mmv。但请参阅“Mass Rename/copy/link Tools”。

【讨论】:

【参考方案4】:

@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

【讨论】:

感谢 ghostdog74 和其他所有人!【参考方案5】:

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

【讨论】:

我在 FreeBSD 上,所以这不起作用.. bash: /usr/local/bin/rename: Argument list too long 我不知道如何设置重命名变量 想通了。对于 [A-Za-z]*_[0-9][0-9][0-9][0-9][0-9].doc 中的 i做 mv "$i" "$i/_[0-9][0-9][0-9][0-9][0-9]";完成【参考方案6】:

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

【讨论】:

并非总是如此。在 RH 系统上,它会进行简单的字符串替换。

以上是关于如何快速重命名文件夹中的一堆文件的主要内容,如果未能解决你的问题,请参考以下文章

一个班轮重命名一堆文件

将自己文件夹中的松散文件批量复制到新的重命名文件夹

VBS 重命名一个文件夹内的全部文件

文件重命名时快速添加时间前缀

如何让文件自动重命名?

bat脚本照片复制重命名?