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

Modified on: Fri, 08 Jun 2018 23:54:53 +0800

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

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

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

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

最佳答案

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

rename "s/SEARCH/REPLACE/g"  *

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

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

请注意,此renameprename < / a>(又名Perl rename)命令,它支持完整的Perl正则表达式。还有另一个使用模式的rename,并没有那么强大。 prename默认安装在Ubuntu上(与Perl一起)。


以下是一些例子:

前缀

添加强>:

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中的通配符,因此.pdf匹配qPDF\.pdf只匹配确切的字符串.pdf。另外非常重要的是要注意,如果你不熟悉BASH,你必须在单引号中加入反斜杠!你不能省略引号或使用双引号,或者bash会尝试翻译它们。要bash \. "\."等于.。(但是加倍-quotes和反斜杠用于,例如“\ n”表示换行符,但由于"\."不是有效的反向转义序列,因此它转换为.

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


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

rename -n s/'One'/'Two'/g *

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

作者:wjandrea,Matt

相关问答

添加新评论