Linux / Windows / Unix /…文件名:允许使用哪些字符?哪些未逃脱?


43

在不同的操作系统中,哪些字符是允许的,并且哪些字符必须在命令行上转义?


以下是一些有用的答案,但是您要达到什么目的?编写自己的角色白名单例程可能不是最佳途径。
麦地那2010年

谢谢大家!所有答案都是有帮助的。 我需要的信息是:我正在写一个工具,通过更改文件名(无元数据)来标记整个文件系统中的文件。
java.is.for.desktop 2010年

另请参阅有关超级用户的答案。
pevik '16

Answers:


26

在Wikipedia上有关文件名的文章中讨论了文件名字符。

您可能会发现本文内容丰富:修复Unix / Linux / POSIX文件名

本文比较了OS X和Windows XP:X与XP:文件名中的禁止字符(PDF,请参阅第64-66页)。

1,000美元不应该在文件名中出现的内容Alex

我不知道必须取消转义哪些字符,但是在Linux中,转义可能具有特殊含义的字符(例如“ n”(换行符),“ t”(制表符)等)可能不是一个好主意,但这通常不是文件操作中的问题。也许您的意思是“转义”而不是“未转义”。最常见的是shell将解释的内容,例如空格,“>”,“ <”等。有关这些内容的讨论,请参见我链接的一些文章。


7
这并不是真正的答案-所有信息都是外部的。而且其中一些链接现在已断开。
史蒂夫·本内特

26

* nix文件名中不允许的唯一字符是NUL/。在Windows中,唯一NUL:\是真正不允许的,但许多应用程序限制进一步,也防止?*+,和%

除非有必要,否则文件名中的任何字符都无需转义,以免被shell解释。


第二点值得强调。通常,“转义”是指一种外壳机制,该机制允许用户指定包含字符的字符串(例如,路径名),否则这些字符会以特殊方式处理。如果OP意味着使用“百分比编码”之类的东西来编码否则不允许的字符,则这是每个涉及的程序都必须采用(或不采用)的纯应用程序级“路径名协议”。
克里斯·约翰森

我正在使用readdir扫描文件夹,然后尝试使用返回的名称打开文件。其中一些无法使用ENOENT打开,这表明即使对于OS,有时您也必须逃脱?
gman

13

如果您在Windows资源管理器中使用以下字符之一创建文件,它将抱怨不允许使用这些字符:

\ / : * ? " < > |

一个很好的参考在这里:

命名文件,路径和命名空间
http://msdn.microsoft.com/zh-cn/library/aa365247%28VS.85%29.aspx

微软进一步声明:

“ ...在基于Windows的桌面平台上,无效的路径字符可能包括ASCII / Unicode字符1到31,以及引号(”),小于(<),大于(>),竖线(|),退格键(\ b),空(\ 0)和制表符(\ t)。”

http://msdn.microsoft.com/zh-CN/library/system.io.path.getinvalidpathchars.aspx


我记得几年前曾读过,用户模式Windows具有这些限制并且不区分大小写(“ ABC.txt” ===“ abc.txt”)。但是,内核模式Windows的限制较少,并且区分大小写(就像* NIX一样,“ ABC.txt”!==“ abc.txt”)。但是,出于所有意图和目的,上述字符将适用于大多数程序,因为它们以用户模式运行。
CubicleSoft

我可以将\ / : * ? " < > |所有这些转义,并在我的GNU / Linux系统上使用mkdir创建它们。您也可以mkdir '?'用来创建?目录。我已经使用ramdisk和XFS文件系统进行了测试。
S.Goswami

5

在Linux和其他POSIX兼容系统上,保留“ /”,因为它是目录分隔符,而“ \ 0”(NULL字符)则指定字符串的结尾。其他所有内容都是允许的。


1
尽管强烈建议您避免换行,制表符,控制字符等,并确保文件名是有效的UTF-8。
Flimm 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.