如何从文件名中删除 URI 编码?

Ben*_*Ben 8 command-line rename

我意识到这可能是一个非常简单的问题,但我对命令行仍然很陌生,并且只掌握了基本命令。

我已经从我的大学下载了一些讲座演示文稿(大约 25 个左右),但是这样做时它们被命名为……

L2%20Development%20of%20immune%20system.pptx
L4%20Molecular%20Recognition.pdf
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,他们下载的是 URL 编码%20而不是空格。

我的问题是如何批量重命名所有这些文件,以便%20删除并替换为空格?

Run*_*ium 10

在 Debian 和衍生产品(包括 Ubuntu)上,您可以使用rename,它将 Perl 表达式应用于每个文件名。

rename 's/%20/ /g' L*
        |  |  | |   |
        |  |  | |   +--- Files to match
        |  |  | +------- globally
        |  |  +--------- with space
        |  +------------ %20
        +--------------- Substitute
Run Code Online (Sandbox Code Playgroud)

我会考虑使用下划线而不是空格——因为它通常会使 cli 世界中的生活更轻松。

推广到所有 URI 编码:

rename 'use URI::Escape; $_ = uri_unescape $_' *%*
Run Code Online (Sandbox Code Playgroud)


小智 7

您可以使用deurlnamefrom renameutils

$ ls
L4%20Molecular%20Recognition.pdf
$ deurlname L4%20Molecular%20Recognition.pdf
$ ls
L4 Molecular Recognition.pdf
Run Code Online (Sandbox Code Playgroud)

我编写了一个脚本,允许您在编辑器中重命名文件。

您只需向脚本传递一个文件名,它就会打开您的编辑器,其中包含文件名。然后编辑文件名、写入并关闭编辑器。

$ 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
Run Code Online (Sandbox Code Playgroud)

我还编写了一个脚本 ,可以自动重命名文件以符合我喜欢的命名方案。当我下载文件时,我做的第一件事就是在它们上面调用这个脚本。

$ 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
Run Code Online (Sandbox Code Playgroud)

小心那个脚本。它可以做一些相当戏剧性的重命名。nf -n在重命名任何文件之前使用其试运行 ( ) 选项。