给定一个由双字节/全角数字和空格(以及一些半角数字和下划线)组成的文件名目录,如何将所有数字和空格转换为单字节字符?
例如,此文件名由一个双字节数字、后跟一个双字节空格和一些单字节字符组成:
2 2_3.ext
我想将其更改为所有单字节,如下所示:
2 2_3.ext
我尝试使用 convmv从 utf8 转换为 ascii,但所有文件都会出现以下消息:
“ascii 没有涵盖所有需要的字符:文件名”
给定一个由双字节/全角数字和空格(以及一些半角数字和下划线)组成的文件名目录,如何将所有数字和空格转换为单字节字符?
例如,此文件名由一个双字节数字、后跟一个双字节空格和一些单字节字符组成:
2 2_3.ext
我想将其更改为所有单字节,如下所示:
2 2_3.ext
我尝试使用 convmv从 utf8 转换为 ascii,但所有文件都会出现以下消息:
“ascii 没有涵盖所有需要的字符:文件名”
您需要 (1) Java 1.6 ( ) 的规范化java.text.Normalizer
,或 (2) ICU,或 (3 (不太可能)) 我工作的地方销售的产品。
你有什么可用的工具?几种脚本语言中有 Unicode 规范化函数,例如在 Python 中:
for child in os.listdir(u'.'):
normal= unicodedata.normalize('NFKC', child)
if normal!=child:
os.rename(child, normal)
感谢您的快速回复、bmargulies 和 bobince。我找到了一个 Perl 模块Unicode::Japanese,它有助于完成工作。这是我制作的 bash 脚本(在此示例的帮助下),用于将当前目录中的文件名从全角字符转换为半角字符:
#!/bin/bash
for file in *;do
newfile=$(echo $file | perl -MUnicode::Japanese -e'print Unicode::Japanese->new(<>)->z2h->get;')
test "$file" != "$newfile" && mv "$file" "$newfile"
done