ext4 允许文件名中包含某些字符,而 NTFS 不允许。是否有脚本可以替换文件名中的这些字符?
答案1
以下应将文件名中所有不允许的字符替换为下划线。请注意,这可能会导致多个文件重命名为同一个名称。例如,如果您有两个名为file>/txt
和 的文件file<.txt
,则它们都将被重命名为file_.txt
,并且其中一个将覆盖另一个,从而将其删除。
find /path/to/ntfs/mount/ -print0 | xargs -0 rename 's{[\\:*?"<>|]}{_}g'
此命令适用于 Debian 提供的 rename 的 perl 版本。您的发行版可能提供语法略有不同的 rename 版本。
答案2
首先我必须指出的是,NTFS 支持完整的POSIX 命名空间因此,其上的文件名可以包含除/
和之外的任何字符'\0'
,就像 ext4 一样。只有 Win32 命名空间禁止使用更多字符并使用不区分大小写的名称查找。过去有各种Windows 中的 Unix 子系统现在有了 WSL 和 WSL2,所以你可以在 NTFS 上自由存储任何类型的 Linux 文件名
因此,现在为了正确操作使用 Win32 命名空间的应用程序,您需要修复名称。但是将所有禁用字符替换为_
Unicode 中有很多很好的替换字符可供您使用,例如转换字符一半的宽度他们的全角表格。perl-rename
您可以使用tr
命令
find /mount/point -print0 | xargs -0 \
rename 'use utf8; use open qw/:std :utf8/; tr#\\:*?"<>|#\:*?"<>#'
如果你只想限制为 ASCII,那么你可以找到一些具有差不多的意思替换,例如翻译"
为'
find /mount/point -print0 | xargs -0 rename 'tr#\\:*?"<>|#_\-._'"'"'[]!#'
您可以选择更多建议来获得更好的替换弦