如何使用命令行轻松重命名多个文件?

Jie*_*eng 111 command-line rename

我在 Windows 中快速重命名文件的方法之一是

F2 > Rename > Tab (to next file) > Rename ...
Run Code Online (Sandbox Code Playgroud)

但是在 Ubuntu/Nautilus 中,我无法切换到下一个文件。但是在 Linux 上,我认为必须有一个命令行替代方案。

但是,有时,我可能想要更多地控制如何重命名特定文件。在这种情况下,也许最好能够切换到下一个文件

Mat*_*att 200

rename一直在用。这很简单,但希望你知道基本的正则表达式:

rename "s/SEARCH/REPLACE/g"  *
Run Code Online (Sandbox Code Playgroud)

这将替换字符串SEARCHREPLACE在每一个文件(也就是*)。这/g意味着全局,所以如果你有一个SEARCH_SEARCH.jpg,它会被重命名REPLACE_REPLACE.jpg。如果你没有/g,它只会做一次替换,因此现在命名为REPLACE_SEARCH.jpg。如果您想要不区分大小写,请添加/i(即,/gi/ig在最后)。

使用正则表达式,您可以做更多事情。

请注意,这renameprename(又名 Perl rename)命令,它支持完整的 Perl 正则表达式。还有另一个rename使用模式,但没有那么强大。prename曾经默认安装在 Ubuntu(与 Perl 一起)上,但现在您可能必须执行以下操作:

sudo apt install rename
Run Code Online (Sandbox Code Playgroud)

这里有一些例子:

字首

添加

rename 's/^/MyPrefix_/' * 
Run Code Online (Sandbox Code Playgroud)
  • document.pdf 重命名为 MyPrefix_document.pdf

删除

您也可以删除不需要的字符串。假设您有 20 个名为 like 的 MP3 文件,CD RIP 01 Song.mp3并且您想删除“CD RIP”部分,并且您想使用一个命令将其从所有文件中删除。

rename 's/^CD RIP //' *
Run Code Online (Sandbox Code Playgroud)
  • CD RIP 01 Song.mp301 Song.mp3

注意 中的额外空格'^CD RIP ',如果没有空格,所有文件都会有一个空格作为文件的第一个字符。另请注意,这将在没有^字符的情况下工作,但会匹配CD RIP 文件名的任何部分。该^保证,如果他们是在文件的开头只删除字符。

后缀

添加

rename 's/$/_MySuffix/' *
Run Code Online (Sandbox Code Playgroud)
  • document.pdf 重命名为 document.pdf_MySuffix

改变

rename 's/\.pdf$/.doc/' *
Run Code Online (Sandbox Code Playgroud)

Something.pdf变成Something.doc. (反斜杠的原因是,.是正则表达式中的通配符,所以.pdf匹配qPDF\.pdf只匹配精确的字符串.pdf。同样非常重要的是要注意,如果你不熟悉BASH,你必须把反斜杠放在单引号中!你不能省略引号或使用双引号,否则 bash 将尝试翻译它们。要 bash\. "\."equals .。(但使用双引号和反斜杠,例如“\n”作为换行符,但由于"\."不是有效的后转转义序列,它翻译成.)

实际上,您甚至可以将字符串的各个部分用引号括起来,而不是将整个字符串括起来:与BASH 中的and's/Search/Replace/g'相同。您只需要注意特殊字符(和空格)。s/'Search'/'Replace'/gs/Search/Replace/g


我建议-n在您不确定是否有正确的正则表达式时使用该选项。它显示将要重命名的内容,然后不做就退出。例如:

rename -n s/'One'/'Two'/g *
Run Code Online (Sandbox Code Playgroud)

这将列出它所做的所有更改,如果你没有把-n标志放在那里。如果看起来不错,按Up返回,然后擦除-n并按Enter(或将其替换-v为输出它所做的所有更改)。

注意rename默认情况下不附带 17.04 以上的 Ubuntu 版本,但它仍然可以在存储库中使用。sudo apt install rename安装时使用

  • @jiewmeng 是的。在您的模式中使用 `(?:\.[0-9]{3})$`,它将匹配被动组中的所有 3 位文件扩展名。示例:`重命名 s/^my_favorite_movie.avi(?:\.[0-9]{3})$/random_movie.avi/ *`。看看这个 [regex 备忘单](http://www. addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/)。 (2认同)

Rol*_*Xor 22

尝试核聚单体

它没有与 nautilus 集成,但它可以完成工作。是一篇评论。

Thunar(XFCE 的一部分)还有一个可以单独运行的重命名器。

Thunar 批量重命名器

  • 感谢您提及 Thunar 功能。如果您有 Th​​unar - 选择文件夹中的文件并按 F2。 (2认同)

sag*_*ise 10

启动板上似乎有一个名为nautilus-renamer的项目。make install下载脚本并解压缩后,您可以通过运行来安装它。它似乎有一些功能,或者如果你知道一些编程,你可以根据你的需要增强它,因为它只是一个 python 脚本。

在此处输入图片说明


dem*_*mpa 8

如何一次重命名多个文件不是同一个问题但我将建议我在该答案中建议的相同程序:qmv

qmv 是 renameutils 包中的一个方便的工具。它使您能够使用您喜欢的文本编辑器来重命名文件。结合 vim 的强大功能,您将拥有出色的重命名实用程序。

我通常像qmv -f do在要重命名一堆文件的目录中一样调用它。或者,如果我想递归地重命名qmv -R -f do.

每当我需要重命名多个文件时,我总是依靠 qmv(和 vim)。

http://www.nongnu.org/renameutils/


Dan*_*hoa 7

在命令行中,重命名单个文件的命令很简单

mv file1.txt file2.txt
Run Code Online (Sandbox Code Playgroud)

如果您想批量完成,您可能希望通过脚本来完成。如果您提供更多详细信息,我或其他人可能会为您提供一个。也就是说,将内容附加到文件的脚本可能如下所示:

mv file1.txt file2.txt
Run Code Online (Sandbox Code Playgroud)

这可能会根据您需要重命名的确切方式进行调整,例如,如果您有特定的重命名规则要遵循。(我个人会通过 Perl 脚本执行此操作,因为我的 bash-foo 不是那么好,但这只是我。)

请注意,我从先前提出的问题中分离了文件名和扩展名。


Raf*_*lak 7

如果您想在没有命令行的情况下执行此操作,与您在 Windows 中所做的类似,请使用右箭头键而不是tab 键。这将选择下一个文件,就像 Windows 中的选项卡一样。