将 ext4 文件名转换为 NTFS 的脚本

将 ext4 文件名转换为 NTFS 的脚本

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#\\:*?"<>|#_\-._'"'"'[]!#'

您可以选择更多建议来获得更好的替换弦

  • \:反斜线运算符 ⧵ (U+29F5)、大反斜线 ⧹ (U+29F9)
  • ::参见冒号列表ː˸∶︓﹕
  • *:选择其中一个各种星号符号喜欢*∗✱﹡*✲⁎٭※✻✺
  • ?: 查看此列表¿⁇⍰❓❔︖﹖�
  • ": 看引用符号列表, 例如 ”
  • <﹤≪⋖〈❬⟨〈
  • >﹥≫⋗〉❭⟩〉
  • |: 查看垂直条列表¦‖∣│।ǀ

相关内容