我意识到这可能是一个非常简单的问题,但我对命令行仍然很陌生,只掌握了基本命令。
我从我的大学下载了一些讲座演示文稿(约 25 个左右),但是在这样做时,它们被命名为......
L2%20Development%20of%20immune%20system.pptx
L4%20Molecular%20Recognition.pdf
正如您所看到的,它们下载时使用的是 URL 编码%20
而不是空格。
我的问题是如何批量重命名所有这些文件,以便%20
删除并替换为空格?
答案1
在 Debian 及其衍生版本(包括 Ubuntu)上,您可以使用rename
,它将 Perl 表达式应用于每个文件名。
rename 's/%20/ /g' L*
| | | | |
| | | | +--- Files to match
| | | +------- globally
| | +--------- with space
| +------------ %20
+--------------- Substitute
我会考虑使用下划线而不是空格——因为它通常会让 cli 世界的生活变得更轻松。
推广到所有 URI 编码:
rename 'use URI::Escape; $_ = uri_unescape $_' *%*
答案2
您可以使用deurlname
来自重命名工具。
$ ls
L4%20Molecular%20Recognition.pdf
$ deurlname L4%20Molecular%20Recognition.pdf
$ ls
L4 Molecular Recognition.pdf
我写一个脚本它允许您在编辑器中重命名文件。
您只需向脚本传递一个文件名,它就会打开包含该文件名的编辑器。然后编辑文件名、写入并关闭编辑器。
$ ls
L4%20Molecular%20Recognition.pdf
$ viname L4%20Molecular%20Recognition.pdf
======================
L4%20Molecular%20Recognition.pdf█
======================
======================
L4-Molecular-Recognition.pdf█
======================
(pretend this is an editor)
$ ls
L4-Molecular-Recognition.pdf
我也写过一个脚本 自动重命名文件以符合我的首选命名方案。当我下载文件时,我做的第一件事就是在它们上调用这个脚本。
$ ls
L4%20Molecular%20Recognition.pdf
$ nf L4%20Molecular%20Recognition.pdf
'L4%20Molecular%20Recognition.pdf' renamed to 'l4-molecular-recognition.pdf'
$ ls
L4-molecular-recognition.pdf
小心那个脚本。它可以做一些相当戏剧性的重命名。nf -n
在重命名任何文件之前,请使用其试运行 ( ) 选项。
答案3
convmv
您可以在包含文件的目录中使用:
要测试输出是什么:
convmv --unescape *%20*
要实际重命名文件,请添加--notest
:
convmv --unescape --notest *%20*