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)
这将替换字符串SEARCH
用REPLACE
在每一个文件(也就是*
)。这/g
意味着全局,所以如果你有一个SEARCH_SEARCH.jpg
,它会被重命名REPLACE_REPLACE.jpg
。如果你没有/g
,它只会做一次替换,因此现在命名为REPLACE_SEARCH.jpg
。如果您想要不区分大小写,请添加/i
(即,/gi
或/ig
在最后)。
使用正则表达式,您可以做更多事情。
请注意,这rename
是prename
(又名 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.mp3
到 01 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'/g
s/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
安装时使用
sag*_*ise 10
启动板上似乎有一个名为nautilus-renamer的项目。make install
下载脚本并解压缩后,您可以通过运行来安装它。它似乎有一些功能,或者如果你知道一些编程,你可以根据你的需要增强它,因为它只是一个 python 脚本。
与如何一次重命名多个文件不是同一个问题?但我将建议我在该答案中建议的相同程序:qmv。
qmv 是 renameutils 包中的一个方便的工具。它使您能够使用您喜欢的文本编辑器来重命名文件。结合 vim 的强大功能,您将拥有出色的重命名实用程序。
我通常像qmv -f do
在要重命名一堆文件的目录中一样调用它。或者,如果我想递归地重命名qmv -R -f do
.
每当我需要重命名多个文件时,我总是依靠 qmv(和 vim)。
http://www.nongnu.org/renameutils/
在命令行中,重命名单个文件的命令很简单
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 不是那么好,但这只是我。)
请注意,我从先前提出的问题中分离了文件名和扩展名。