如何快速重命名文件夹中的一堆文件
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 系统上,它会进行简单的字符串替换。以上是关于如何快速重命名文件夹中的一堆文件的主要内容,如果未能解决你的问题,请参考以下文章