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

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

F2 > Rename > Tab (to next file) > Rename ... 

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

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

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

 rename "s/SEARCH/REPLACE/g" * 

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

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

请注意,此renameprename (也称为Perl rename )命令,它支持完整的Perl正则表达式。 还有另一个使用模式的rename ,并没有那么强大。 默认情况下,在Ubuntu(以及Perl)上安装了prename ,但现在你可能需要这样做:

 sudo apt install rename 

这里有一些例子:

字首

添加

 rename 's/^/MyPrefix_/' * 
  • document.pdf重命名为MyPrefix_document.pdf

删除

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

 rename 's/^CD RIP //' * 
  • CD RIP 01 Song.mp301 Song.mp3

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

后缀

添加

 rename 's/$/_MySuffix/' * 
  • document.pdf重命名为document.pdf_MySuffix

变化

 rename 's/\.pdf$/.doc/' * 

Something.pdf更改为Something.doc 。 (反斜杠的原因是, .是regexp中的通配符,所以.pdfqPDF匹配,而\.pdf只匹配精确的字符串.pdf 。另外非常重要的是要注意,如果你不熟悉BASH,你必须放回斜杠在单引号中!你可能不会省略引号或使用双引号,或者bash会尝试翻译它们。使用bash \. "\."等于…(但是使用双引号和反斜杠,例如“\ n”对于换行符,但由于"\."不是有效的后退转义序列,因此转换为.

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


我建议使用-n选项,如果你不肯定你有正确的正则表达式。 它显示了将被重命名的内容,然后在不执行此操作的情况下退出。 例如:

 rename -ns/'One'/'Two'/g * 

如果你没有在那里放置-n标志,这将列出它可能做出的所有更改。 如果它看起来不错,按向上返回,然后删除-n并按Enter键 (或用-v替换它以输出它所做的所有更改)。

尝试使用pyrenamer 。

它没有与鹦鹉螺集成,但它完成了工作。 这是一篇评论。

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

Thunar bulk renamer

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

在此处输入图像描述

在命令行中,要重命名单个文件,命令就是这样

 mv file1.txt file2.txt 

如果您想批量执行此操作,您可能希望通过脚本执行此操作。 如果您提供更多详细信息,我或其他人可能会为您提供更多详细信息。 也就是说,将文章附加到文件的脚本可能如下所示:

 #!/bin/bash for file in * do # separate the file name from its extension if [[ $file == *.* ]]; then ext="${file##*.}" fname="${file%.*}" mv "$file" "${fname}_APPENDSTUFFHERE.$ext" else mv "$file" "${file}_APPENDSTUFFHERE" fi done 

根据您需要重命名的内容,这可能会被调整,例如,如果您要遵循特定的重命名规则。 (我个人通过Perl脚本这样做,因为我的bash-foo不是很好,但那只是我。)

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

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

问题不一样如何一次重命名多个文件? 但我打算建议我在答案中提出的相同程序: qmv

qmv是renameutils包中的一个方便工具。 它使您可以使用自己喜欢的文本编辑器重命名文件。 结合vim的强大function,您可以获得出色的重命名function。

我通常像qmv -f do一样调用它,我想重命名一堆文件。 或者,如果我想递归重命名qmv -R -f do

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

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

如果唯一合适的选项是手动重命名文件,那么最好的方法是使用vidir (在moreutils包中):

 sudo add-apt-repository universe && sudo apt-get update && sudo apt-get install moreutils 
 DESCRIPTION vidir allows editing of the contents of a directory in a text editor. If no directory is specified, the current directory is edited. When editing a directory, each item in the directory will appear on its own numbered line. These numbers are how vidir keeps track of what items are changed. Delete lines to remove files from the directory, or edit filenames to rename files. You can also switch pairs of numbers to swap filenames. Note that if "-" is specified as the directory to edit, it reads a list of filenames from stdin and displays those for editing. Alternatively, a list of files can be specified on the command line. 

例子


有选择地重命名文件

当前工作目录的内容:

 . ├── bar ├── baz └── foo 

运行vidir ,重命名包含要重命名的文件名的行中的文件名; 点击CTRL + OCTRL + X

screenshot3

 . ├── bar.bak ├── baz.old └── foo.new 

有选择地切换文件名

当前工作目录的内容:

 . ├── bar ├── baz └── foo 

当前工作目录的文件内容:

 $ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done - bar: This is bar - baz: This is baz - foo: This is foo $ 

运行vidir ,切换包含您要切换的文件名的行中的数字; 点击CTRL + OCTRL + X

screenshot4

 . ├── bar ├── baz └── foo 
 $ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done - bar: This is foo - baz: This is bar - foo: This is baz $ 

有选择地删除文件

当前工作目录的内容:

 . ├── bar ├── baz └── foo 

运行vidir ,删除包含您要删除的文件的行; 点击CTRL + OCTRL + X

screenshot2

 . └── baz 

我正在使用krename。 这是一个GUI应用程序。 它可以读取mp3标签等。

它作为一个单独的应用程序以及Krusader的一部分存在。

还有一个rename脚本 – 这是标准perl安装的一部分(你可能安装了它)。 用man rename检查出来。