我正在尝试将一些包含 MS-DOS 游戏的目录从 Linux 复制到 Windows 计算机。但是,我得到一个[WinError 267] The directory name is invalid
.
以下是其中一些目录的列表:
$ ls -d *:* | sort -R | head
Commander Keen 2: The Earth Explodes/
1942: The Pacific Air War/
Super Solvers: Treasure Galaxy/
Life and Death 2: The Brain/
Deja Vu 2: Lost In Las Vegas/
Hard Drivin' 2: Drive Harder/
RoboMaze 2: The Lobby/
Dune 2: The Building of a Dynasty/
Blake Stone: Planet Strike/
Star Trek: First Contact/
我怀疑:
这些目录名称中的 导致此错误,因为它们是 Windows 文件名中的无效字符。
但是,由于我不能保证:
是唯一使用的无效字符,我正在寻找一种方法来递归地将所有文件和目录重命名为有效的 Windows 文件名,用无效字符替换有效字符。
什么 Linux 命令可以让我这样做?
我推荐这个
rename
命令。通过以下方式安装:rename
使用 Perl 来制作强大的替换命令,但在这种情况下,一个简单的正则表达式替换就可以了——比如:以上将用减号替换方括号内的字符。这些
g
手段取代了所有这些,而不仅仅是第一次出现。如果你想要更复杂的东西,你可以用减号替换一些字符,用下划线替换一些字符,例如:rename 's/[<>:]/-/g; s/["\\|\?*]/_/g;' *
以上只会修复当前目录中的文件和目录。要递归修复子目录和文件,请使用
find
:在上面的示例中,
find
将为rename
当前目录中或下的每个项目运行,进行深度优先搜索。