Unix 和 Windows 文件系统中哪些常见字符是非法的?

yaz*_*com 7 windows unix

我正在 Unix 和 Windows 文件系统中寻找文件和目录名称中不允许的字符,我想知道是否有这样的字符。我注意到 * 和 % 是允许的?

Ste*_*lly 11

没有“Unix”文件系统这样的东西。也没有“Windows”文件系统来解决这个问题。您的意思是 NTFS、FAT16、FAT32、ext2、ext3、ext4 等。它们对名称中的有效字符都有自己的限制。

另外,您的问题标题和问题是指两个完全不同的概念吗?您想了解合法字符的子集,还是想知道两个系统中都可以使用哪些通配符?

http://en.wikipedia.org/wiki/Ext3声明“文件名中允许使用除 NULL 和 '/' 之外的所有字节”。

http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx描述了“不管文件系统”的有效文件名的一般情况。特别是以下字符是保留的 < > : " / \ | ? *

Windows 还限制不使用文件的设备名称:CON、PRN、AUX、NUL、COM1、COM2、COM3 等。

Windows 和基于 Unix 的操作系统中的大多数命令都接受 * 作为通配符。Windows 接受 % 作为单个字符通配符,而 Unix 系统的 shell 使用 ? 作为单字符通配符。

  • 从技术上讲,设备名称限制只是在 Win32 子系统中。您可以在 Windows 上使用 POSIX 创建包含这些字符串的文件,就像在 Cygwin 中一样。 (2认同)

use*_*686 8

大多数文件系统都相当宽松:例如,所有 NTFS、extN、btrfs、XFS 和 ReiserFS 都允许除 1) 空字节和 2) 斜杠之外的所有内容/

操作系统可能有其自身的限制特别是,Win32 0 API不允许 * ?使用通配符、\ /路径分隔符、:流分隔符,并且< > | "没有充分的理由1。同样不允许使用 ASCII 控制字符(0x00-0x1F 范围)。


在 Unix 中,通配符扩展是由 shell 和函数完成的glob()。在 Windows 中,这是文件系统驱动程序的工作,这就是为什么*不能?在文件名中使用 和 的原因。


0我没有关于 Windows 提供的 POSIX 和 OS/2 API 的信息。

1它们在命令行 shell ( ) 中cmd.exe特殊,但它肯定可以(而且事实上确实)像 Unix shell 一样处理转义。


Cak*_*mox 5

这实际上取决于文件系统,但大多数 Unix 文件系统允许除 NULL 和 / 之外的任何字节。NTFS 允许除 NULL 和 \ / : * ? 之外的所有内容 ” < > |。

维基百科上有一个非常有用的比较图表: http: //en.wikipedia.org/wiki/Comparison_of_file_systems

也就是说,几乎所有 shell 首先将 * 识别为通配符,并且仅在转义时将文件名中的字符识别为文件名中的字符。为什么不使用use *?