如何更改文件名的编码(linux,ext4)

时间:2017-06-20 09:18:04

标签: linux bash

我收到了3670个名称不是UTF-8编码的文件。这使得输入它们通常是不可能的,尽管一些程序适应并正确显示它们。这意味着我有很多像这样显示的文件

?cole ?l?mentaire

而不是像这样

école élémentaire

虽然我可以,对于任何给定的文件,直觉并重命名,我想批量重命名。诀窍不是批量重命名,这很容易,而是自动确定目标。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

  

虽然我可以,对于任何给定的文件,直觉并重命名它,我想批量重命名。诀窍不是批量重命名,这很容易,而是自动确定目标。

  • 将文件名存入文件:find <directory> > filelist.txt

  • 检查文件名的编码:file filelist.txt / hexdump -C filelist | less

  • 以UTF-8编码获取第二个文件名列表:iconv -f <source-encoding> -t utf-8 filelist.txt > filelist-utf8.txt

...此时@ Nazar554使用专门构建的convmv命令在评论中发布了this link to a ServerFault answer,并且无法继续这个答案,并提供有关如何从两个文件列表逐行创建所需的mv命令。 :-D

但前两个要点仍然可以帮助您确定源编码。

答案 1 :(得分:1)

总结答案linked to above

  1. 切换到包含相关文件的目录:

    cd myfiles
    
  2. 确定文件名的编码:

    ls | file -
    
  3. 列出convmv的可用编码,然后选择与第2点对应的编码:

    convmv --list
    
  4. 执行文件编码转换为UTF-8的干转:

    convmv -f xxxx -t utf8 .
    
  5. 执行文件名编码转换为UTF-8:

    convmv --notest -f xxxx -t utf8 .
    
  6. 当然,需要首先在Linux上安装convmv {1}},在Mac上安装sudo apt-get install convmv