【问题标题】:Troubles renaming filenames with diacritics使用变音符号重命名文件名的麻烦
【发布时间】:2016-09-22 20:18:33
【问题描述】:

为什么此 bash 命令尝试将 é 替换为 ee 而不是 e

$ rename 's/[éè]/e/g' tést                
Can't rename tést teest: Aucun fichier ou dossier de ce type

我怎样才能让它按我期望的方式工作?

【问题讨论】:

  • 英文的错误是什么?是不是说文件不存在? ls tést 在当前目录中会给出什么?
  • 双 e 可能与文件名是 UTF-8 有关,因此重音字符将是两个字节,重命名似乎无法正确处理。 sed 会为我做:echo tést |sed 's/[éè]/e/g' -> 测试

标签: regex bash diacritics file-rename


【解决方案1】:

因为您的终端设置为 UTF-8,但 rename 对字节进行操作。因此,它实际上看到了s/[\303\251\303\250]/e/g,而您的字符串t\303\251st 包含其中两个,因此每个都替换为e

您可以将任何 Perl 代码添加到表达式中,因此您可以通过 use utf8 为正则表达式打开 utf-8,并且您可以通过解码主题变量 $_ 来解码参数:

rename 'use utf8; use Encode; $_ = decode("UTF-8", $_); s/[éè]/e/g' tést

【讨论】:

  • 太棒了,这里总是有新东西要学。谢谢:)
猜你喜欢
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
  • 2017-08-05
  • 2017-02-01
  • 2011-07-18
  • 2020-04-30
  • 2011-08-13
  • 2013-07-13
相关资源
最近更新 更多