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

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

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

我从我的大学下载了一些讲座演示文稿(约 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*

答案4

对于某些 Linux 用户,rename命令最佳答案行不通的。

如上所述这里,另一个非 Perlrename程序也可用,它作为util-linux项目的一部分提供。

L与 util-linux 命令相同的命令(对于以 开头的文件)的语法是:

rename '%20' ' ' L*

相关内容