使用变音符号重命名文件名时遇到问题
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
为什么这个 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