我的印象是文件名中唯一不允许的字符是,/
但我似乎无法创建名称包含*
、\
、"
、:
、|
或其中之一等字符的文件。例如,<
>
$ echo "*"
> *
$ touch "*"
> touch: setting times of `*': No such file or directory
我正在编写一个 shell 脚本,要求用户输入文件名,并且我想确保该名称不包含任何无效字符。某处有一个列表吗?
更新:
我没有意识到我是在 FAT32 文件系统(USB 记忆棒)中执行此操作,该文件系统不允许在文件名中使用“*”和其他字符。难怪它不起作用。对不起这是我的错!!
答案1
我很确定唯一的保留字节是 0 (ASCII Nul) 和 0x2f (ASCII '/', 正斜杠)。
您可以轻松地创建一个包含“.”、“\”和其他时髦内容的文件。想想“unicode 文件名”,它包含各种奇怪的字节值。
当然,同一目录中不能有重复的文件名,因此文件名为“.”和“..”通常不能由单纯的用户创建:内核的文件系统部分在创建目录时创建它们。
另请注意,大多数文件系统对文件名的长度都有限制,并且您无法创建名称为空字符串的文件。
答案2
好吧,实际上你可以,只需将其设为单引号,
例如touch '*'
或者使用您的 FM:
有关更多详细信息,请参阅Reserved characters and words
在本页,至少/ \ . ..
是不允许的