使用变音符号重命名文件名时遇到问题

Troubles renaming filenames with diacritics

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

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

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

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

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

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