如何从文件名中删除无效字符?

如何从文件名中删除无效字符?

我有包含如下无效字符的文件

009_-_�%86ndringshåndtering.html

这是Æ文件名出现错误的地方。

有没有办法可以删除所有无效字符?

或者可以tr以某种方式使用?

echo "009_-_�%86ndringshåndtering.html" | tr ???

答案1

一种方法是使用 sed:

mv 'file' $(echo 'file' | sed -e 's/[^A-Za-z0-9._-]/_/g')

当然,用您的文件名替换file。这会将除字母、数字、句点、下划线或破折号之外的所有内容替换为下划线。您可以根据需要添加或删除要保留的字符,和/或将替换字符更改为其他任何字符,或什么都不改。

答案2

我从损坏的 USB 驱动器中恢复了一些文件名损坏的日文文件,上述解决方案对我来说不起作用。

我推荐排毒套餐:

Detox 实用程序可重命名文件,使其更易于使用。它可删除空格和其他类似的麻烦。它还可翻译或清理以 8 位 ASCII 编码的 Latin-1 (ISO 8859-1) 字符、以 UTF-8 编码的 Unicode 字符以及 CGI 转义字符。

使用示例:

detox -r -v /path/to/your/files
-r 递归到子目录
-v 详细说明正在重命名的文件
-n 可用于试运行(仅显示将要更改的内容)

答案3

我假设您使用的是 Linux 系统,而文件是在 Windows 系统上创建的。Linux 使用 UTF-8 作为文件名的字符编码,而 Windows 使用其他编码。我认为这就是问题的原因。

我会使用“convmv”。这是一个可以将文件名从一种字符编码转换为另一种字符编码的工具。对于西欧,以下方法之一通常有效:

convmv -r -f windows-1252 -t UTF-8 .
convmv -r -f ISO-8859-1 -t UTF-8 .
convmv -r -f cp-850 -t UTF-8 .

如果您需要在基于 Debian 的 Linux 上安装它,您可以运行以下命令:

sudo apt-get install convmv

它每次都对我有效并且确实恢复了原始文件名。

来源:租赁网络实验室

答案4

回答如下https://stackoverflow.com/questions/2124010/grep-regex-to-match-non-ascii-characters, 您可以使用:

rename 's/[^\x00-\x7F]//g' *

其中*匹配要重命名的文件。如果要在多个目录中执行此操作,可以执行以下操作:

find . -exec rename 's/[^\x00-\x7F]//g' "{}" \;

您可以使用 -n 参数进行rename试运行,并查看会发生什么变化,而无需进行任何更改。

相关内容