Linux如何批量重命名文件? rename命令快速修改多个文件名的技巧

说实话,重命名功能确实很好用,但第一次使用时确实需要耐心等待。
我记得第一次在Ubuntu上使用的时候,我几乎把所有的.txt都改成了.log。
幸运的是,反应几乎停止了。
下面我给大家讲几个我实际使用的场景和经验。

首先我给大家举一个具体的例子。
我曾经有一个名为 old_version.txt 和 new version.txt 的项目。
后来整理数据的时候,需要统一格式。
我只是使用了 rename -s 's/old_version/new_version/' .txt ,这一切都是在一行中完成的。
正则表达式的这一部分尤其重要。
你需要知道/s/意味着什么——旧内容/新内容,就像Perl中的替换逻辑一样。

有趣的是,替换关键字时有一个小技巧。
例如,如果你想改变第一个匹配的元素,就不要考虑添加参数,直接写s/old/new/即可。
但是,如果文件中始终包含“old”一词,并且您想将其全部替换,则必须添加字母“g”,例如 rename -s 's 's/old/new/g' .txt。
我的同事犯了这个错误。
我只改了第一个旧的,最后文件名还留了一堆空格。
那一刻我真的不知道该笑还是该哭。

添加前缀和后缀时,请记住 ^ 和 $ 在正则表达式中的含义。
需要在所有文件名之前添加项目编号,因此我使用了 rename -s 's/^/project_/g' .txt。
这个g非常重要,否则file.txt将变成project_file.txt,其他所有内容都保持不变。
还有删除后缀。
例如,习惯上在备份文件中添加_backup。
恢复时,您必须使用 s/_backup$//。
请记住,$ 代表行尾。

如果我们谈论正则表达式,最常使用的是删除数字的正则表达式。
上次整理照片库时,所有文件名都是IMG_1 2 3 4 .jpg。
我直接使用rename -s 's/d+//g' .jpg,d+匹配数字。
这项技术确实令人惊叹。
还有大小写转换。
以前,从 Windows 复制的文件都是大写的。
我直接使用 rename -y 'A-Z/a-z/' .txt 并更改了整行。
我一开始对这个 y 命令没有反应,认为这是一个语法错误。
后来查了man,发现是音译(替换字符)的意思。

最令人惊奇的是用零填充数字。
这并不经常使用,但一旦使用就会引起问题。
我有一个像 error_1 .log error_2 .log 这样的日志文件。
要将其转换为单一格式,请使用 rename -s "\(d+\)" "sprintf(' d',\$1 )" e .log。
这个 e 修饰符允许执行 Perl 代码。
我花了很长时间才明白这一点。
其实是有点困难。
但用了之后效果爆炸,error_1 .log立马变成了error_01 .log,OCD看完就满意了。

但是,重命名的时候出现了一个很大的错误。
不同的 Linux 发行版可能支持不同的常见样式。
我曾经在 CentOS 上使用 Perl 风格的正则表达式,但它直接崩溃到 Debian,导致语法错误。
所以,每次改变环境,都要先用man rename确认。
这个教训太深刻了。
还有备份!我有一个朋友在没有备份的情况下开始处理此问题,最终将数百个文件更改为 .xxe。
最后他不得不重建它,这是一个巨大的损失。

还建议测试命令。
我一般先用echo看效果,比如echo "rename -s 's/.txt/.log/'.txt" 看看输出是否乱。
另一个技巧是添加 -i 选项,例如重命名 -i -s 's/.txt/.log/' .txt。
系统会提示您更改每个文件,确认后才进行更改,以防止误操作。

说实话,虽然重命名是一个强大的工具,但如果使用得当,它确实可以为您省去很多麻烦。
在我目前的文件管理流程中,批量重命名大多是基于此。
但要想做到完美,还是需要具备强大的备份习惯。
毕竟,使用计算机你永远不知道什么操作会出错。

linux命令改文件名字 linux命令修改文件名称

嘿,让我告诉你我在Linux系统中更改文件名的时间。

2 01 8 年我使用Linux系统进行开发时,最常用的重命名文件的方法是使用mv命令。
当时我手头有一个项目。
文件名很长,需要转换成英文。
我用mv oldname.txt newname.txt将它们一一更改,变化是巨大的。
最烦人的是,你必须确保新的文件名没有被占用,否则会报错。
那次我傻了,忘了检查newname.txt是否存在。
结果卡了好久,最后用sudo也修不了。
因此,使用mv重命名单个文件时,首先要验证新名称不冲突。

然后,我做了一个批处理工作,所以我不得不使用重命名命令。
我记得那是 2 01 9 年。
我的一个文件夹中有数百个日志文件,全部都是 log_.txt 格式。
我的老板让我将其更改为system_log_.txt。
我在命令行上输入了 rename 's/log_/system_log_/g' log_.txt 。
刚开始没有答案的时候,我以为是脚本写的错误,后来查了一下,原来我的旧机器上的rename命令是支持那个Perl表达式的。
修改了上百个文件,感觉棒极了!
当然,有时命令行并不是必需的。
例如,在Ubuntu上,我只是打开GNOME文件管理器,右键单击该文件,“重命名”,更改后按Enter键。
我的妻子教了我这个技巧。
他的电脑都是Windows,所以我对Linux不太了解。
但如果你真的要改变数百个东西,图形界面会非常慢。

至于剧本,我没有太多经验。
有一次,一个朋友来找我,想要创建一个自动备份脚本,同样需要更改文件名。
我为它写了一个简单的Bash脚本,用循环来一一mv,并添加一个if来判断新名称是否被占用。
不过这方面我做的不多,所以不敢乱说。

总之,使用mv重命名文件、批量重命名是最简单的。
如果文件不多,图形界面也可以。
这就是我这十年来所有的打陷阱的经验了。