如何递归重命名文件/文件夹以使其名称适合 Windows?

如何递归重命名文件/文件夹以使其名称适合 Windows?

我在 Ubuntu 机器上有一堆文件,它们的文件名中包含各种 Windows 不接受的字符(主要是“:”和“*”,但也可能还有其他)。

将它们全部重命名并移动到 Windows 机器的最简单方法是什么? 可以用“[冒号]”和“[星号]”之类的字符替换这些字符。

答案1

看一眼Glindra 重命名排毒

Glindra 文件实用程序可以安装在 Windows 或 Linux 上。在 Windows 上清理文件名的示例:

rena *.* -portable

rena *.* -safe
  • -安全的
    将前导破折号(连字符)映射到下划线。
    折叠空格。
    将有问题的字符(例如 *?:[]"<>|(){})映射到下划线。
  • -便携的
    执行与 -safe 相同的清理操作,此外:
    将 Latin 1 字母表上半部分的所有 8 位字符映射到合理的 7 位后备字符。
    将单引号字符 '`´ 映射到下划线。

来源:修复 Unix/Linux/POSIX 文件名:控制字符(如换行符)、前导破折号和其他问题

答案2

尝试雷库瓦

这是我发现的唯一一个可以处理非 W​​indows 友好文件名的 Windows 实用程序。

使能够扫描未删除的文件(用于从损坏或重新格式化的磁盘中恢复)并扫描您的文件夹。恢复时,启用恢复文件夹结构。Recuva 将有效地将整个目录“复制”到另一个位置,同时“净化”不友好的文件名。

答案3

如果不使用 Linux,也不需要进行任何测试,我相信可以使用如下的单行命令。

改变一个字符:

find . -type f -exec rename 's/:/\[colon\]/g' {} +
find . -type f -exec rename 's/\*/\[asterisk\]/g' {} +

最后删除所有非字母数字字符:

find . -type f -exec rename 's/[^A-Za-z0-9._]//g' {} +

答案4

我结合了前两个答案和 pyRenamer (GUI) 来解决这个问题。在 Linux 下,我使用 pyRenamer 折叠文件夹名称(目录)中的空格 - 通过用空白替换空格 - 以便其他程序(Glindra rename)可以递归工作(可以放置下划线)。从文件中,我还取出了一些 Windows 可接受的字符或单词以节省空间,并同样折叠了文件名中的空格。然后我运行 rena 取出非 Windows 字符,保存到闪存驱动器,然后使用 Recuva“恢复”到 Windows 下的文件夹。Recuva 指示文件路径是否太长(它还会删除非 Windows 字符)。我还没有找到一个工具来检查文件名的路径,看它们是否低于 Windows 的最大限制 255(或者说 240 以留出一些余地)。

相关内容