如何高效地重命名数千个文件?

如何高效地重命名数千个文件?

我的 Fedora PC 中有一堆音乐文件(实际上是数千个文件),我想用两个规则重命名它们:

  1. 每个空格必须替换为字符_(下划线),并且
  2. 每个大写字母都必须替换为对应的小写字母。

例如,歌曲的文件名玻璃月亮下,这是专辑中的第六首曲目,06 Under A Glass Moon.mp3在我的电脑中命名,我希望将其命名为06_under_a_glass_moon.mp3.

我的问题是:是否可以这样做每一个我收藏中的歌曲/文件,无需手动操作。

笔记:澄清一下,我不需要编辑歌曲的元数据;我用 EasyTAG 来做到这一点。我所需要做的就是修改歌曲的文件名。


更新:我知道这个问题已经有一段时间了,有些人已经回答了,但我使用 EasyTAG 找到了一个更简单的解决方案。这样做的方法是:

View --> Scanner Mode --> Process Fields. 

在那里你可以选择将某些字符替换为其他字符(不限于将“”替换为“_”),你可以随意选择小写或大写,等等。此外,您可以决定要更改哪些字段。非常有用的功能。

另外,感谢那些回答的人。您的帮助非常有用。

答案1

您可以安装Perl脚本rename。然后尝试这样做:

$ rename -n 's/[A-Z]/lc($&)/ge; s/\s/_/g' files*

-n(测试正常后 取下开关)


有两个实用程序称为rename. Fedora 中无法做到这一点。其他一些发行版默认附带 Perl 发行版。如果运行以下命令 ( GNU)

$ file "$(readlink -f "$(type -p rename)")"

你有一个像这样的结果

.../rename: Perl script, ASCII text executable

并且不包含:

ELF

那么这似乎是正确的工具 =)

如果没有,例如在 Fedora 上,手动安装

最后但并非最不重要的一点是,这个工具最初是由 Perl 的父亲 Larry Wall 编写的。

答案2

使用相同的rename命令为 @sputnick,并结合find:

find /path/to/collection -type f -execdir rename -n '$_ = lc;y/ /-/' {} +
  • $_ = lc将输入转换为小写。y/ /-/将空格更改为-(类似于tr)。
  • -execdir在文件目录中运行命令,以便将其{}替换为./name-of-file.因此目录应该不受它的影响。

相关内容