Linux / Windows / Unix / …文件名:允许哪些字符? 哪些是非转义的?

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

关于文件名的维基百科文章中有关于文件名字符的讨论。

你可能会发现这篇文章的信息: 修复Unix / Linux / POSIX文件名 。

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

事情不应该在$ 1,000亚历克斯的文件名称

我不知道哪些字符必须是unescaped,但在Linux中,可能不是一个好主意,以逃避可能有特殊含义的字符,如“n”(换行符),“t”(tab)等,但是这在文件操作中通常不是问题。 也许你的意思是“逃脱”而不是“非转义”。 最常见的是shell将会解释的空格,例如“>”,“<”等等。参见我链接的一些文章来讨论这些文章。

* nix中文件名中不允许的唯一字符是NUL/ 。 在Windows中,只有NUL\确实是不允许的,但许多应用程序进一步限制,也阻止?*+%

在任何情况下,文件名中的任何字符都不需要转义,除非需要为了不被shell解释。

如果您使用以下字符之一在Windows上使用资源pipe理器创build文件,则会抱怨字符不被允许:

 \ / : * ? " < > | 

这里有一个很好的参考:

命名文件,path和命名空间
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx

微软进一步指出:

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

http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidpathchars.aspx

在Linux和其他POSIX兼容系统上,“/”是保留的,因为它是目录分隔符,“\ 0”(NULL字符)表示string的结尾。 其他一切都是允许的。