【问题标题】:Linux: rename files containing ASCII-Code for capital lettersLinux:重命名包含大写字母 ASCII 代码的文件
【发布时间】:2019-12-15 19:02:38
【问题描述】:

我有一个文件集合,其中大写字母被它们的 ASCII 代码替换(例如 A 的 ;065)。我怎样才能最有效地从命令行递归重命名它们?

由于我不想让事情变得更糟,很遗憾我不知道如何测试任何命令...

对我来说,修改每个字母的命令是没有问题的。

【问题讨论】:

  • 您能展示几个您拥有的示例“实际”完整文件名吗?
  • 只需创建一个简单的 bash 脚本
  • 一个文件名的例子是171113_;077;066_;066rüssel_2018_;086ideotechniker.pdf这意味着171113_MB_Brüssel_2018_Videotechniker.pdf

标签: regex linux rename


【解决方案1】:

许多 Linux 发行版都提供Perl rename script 的一些变体,有时为prename,有时为rename。任何变体都可以,但不是用 Perl 编写的 Linux rename 实用程序(不带参数运行它,看看帮助文本是否在任何地方提到 perl)。此脚本在文件名上运行 Perl 代码,通常是正则表达式替换。

prename -n 's/;(03[2-9]|0[4-9][0-9]|1[01][0-9]|12[0-6])/chr($1)/eg' *

我创建了一个正则表达式,它匹配作为可打印 ASCII 字符的字符代码的三位数字。您可能需要根据分号后面的确切内容对其进行调整。最后的* 表示要重命名当前目录中的所有文件,它只是一个普通的shell 通配符。可以包含不包含任何重命名内容的文件:prename 将跳过它们。

-n 选项表示显示将要做什么,但实际上并不重命名任何文件。查看输出。如果您对此感到满意,请再次运行不带-n 的命令以实际重命名文件。

【讨论】:

  • 非常感谢。这个完美。 prename 是否也有可能递归执行此操作?
  • 不是prename本身,但如果你的shell支持**,你可以传递**/*之类的东西来遍历子目录。
猜你喜欢
  • 2012-12-23
  • 1970-01-01
  • 2013-12-13
  • 2021-02-22
  • 2014-03-05
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多