您好,我正在寻找一个字符在Unix和Windows文件系统中不允许在文件和目录名称,我想知道是否有这样一个字符(我注意到,*和%是允许的)?
没有像“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使用? 作为单个字符通配符。
大多数文件系统相当宽松:例如,所有NTFS,extN,btrfs,XFS和ReiserFS都允许除1)空字节和2)斜杠/ 。
操作系统可能有其自己的限制。 特别是,Win32 0 API 不允许 * ? 作为通配符, \ /作为path分隔符, :作为stream分隔符,和< > | " < > | "没有理由1.也不允许使用ASCII控制字符(0x00-0x1F范围)。
在Unix中,通配符扩展由shell和glob()函数完成。 在Windows中,这是文件系统驱动程序的工作,这就是为什么*和? 不能在文件名中使用。
0我没有关于Windows提供的POSIX和OS / 2 API的信息。
1它们在命令行shell( cmd.exe )中是特殊的,但它确实可以(并且实际上)像Unix shell一样处理转义。
这实际上取决于文件系统,但大多数Unix文件系统允许除NULL和/以外的任何字节。 NTFS允许除NULL和\ /:*之外的所有内容 “<> |。
Wikipedia上有一个非常有用的比较图表: http : //en.wikipedia.org/wiki/Comparison_of_file_systems
也就是说,几乎所有的shell只在逃脱时才将*识别为通配符,并将文件中的字符识别出来。 为什么不使用use *?
*应该在两者中作为通配符工作,但是它是扩展这些事情的shell或调用的命令,而不是文件系统本身。 例如Bash会将*展开为当前文件夹中空格分隔的文件列表。
我不认为任何文件系统明确禁止任何字符。 在ext2或NTFS上创build文件名是很有可能的,名字如*&( .Windows GUI可能不会让你,但是你可以在Cygwin中完成,因为底层文件系统允许。