热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用错误的编码替换部分文件名

需要一些指导来解决这一问题。在多个子文件夹中有10000个文件,这些子文件夹中

需要一些指导来解决这一问题。在多个子文件夹中有10000个文件,这些子文件夹中的编码已被破坏。通过ls命令,我看到了一个名为'F'$'\ 366''ljesedel.pdf'的文件名,该文件名的开头和结尾均包含'。那只是瑞典语单词åäö错误的一个例子,在这个例子中应该是'Följesedel.pdf'。如果我跑步
    #>查找。
然后我看到这样的文件列表:
./F?ljesedel.pdf

编码不同。到底如何解决这个问题?最明显的方法:

myvar='$'\366''
char="ö"
find . -name *$myvar* -exec rename 's/$myvar/ö' {} \;

和其他可能的方法失败了,因为
      找 。 -name由于找不到它?而不是“真实”字符“'$'\ 366”“

任何建议或指导将不胜感激。


第一个问题是终端需要什么样的编码。确保它是UTF-8。

然后,您需要查找实际文件名包含的字节,而不仅仅是显示它的内容。您可以使用如下的perl oneliner来执行此操作,在包含文件的目录中运行:

perl -E'opendir my $dh,"."; printf "%s: %vX\n",$_,$_ for grep { m/jesedel\.pdf/ } readdir $dh'

这将输出解释为UTF-8字节(如果已将终端设置为该字节)的文件名,然后输出其实际包​​含的十六进制字节。

使用您可以确定您的搜索模式。您的替换必须是ö的UTF-8编码表示形式,如果您的终端设置为默认值,它将默认作为命令参数的一部分。

,

我不是专家-但这可能不是文件名(它似乎保存正确的Unicode文件名)的问题-但是ls(和许多其他实用程序)向终端显示名称的方式

通过将终端字符编码设置为Unicode,我能够显示正确的名称。另外我还注意到GUI程序(文件管理器等)能够显示正确的文件名。

Gnome终端:“终端..设置字符编码-Unicode UTF8

对于许多实用程序而言,“选择”这些文件(例如REGEXP,通配符)仍然是一个挑战。在少数情况下,您将必须使用“ *”模式选择那些字符。如果这是一个主要问题,则仅考虑使用Ascii-可以使用“ o”代替“ö”。不确定这是否可以接受。


推荐阅读
author-avatar
海天豆浆
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有