作者:海天豆浆 | 来源:互联网 | 2023-09-15 18:17
需要一些指导来解决这一问题。在多个子文件夹中有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”代替“ö”。不确定这是否可以接受。