有没有无效的Linux文件名?

如果我想创build一个保证不能代表文件名的string,我可以在Windows上添加下列其中一个字符:

\ / : * ? | < > 

例如

 this-is-a-filename.png ?this-is-not.png 

有什么办法可以在Linux上将string标识为“不可能是文件”?

几乎没有限制 – 除了'/''\0' ,您可以使用任何东西。 但是, 有些人认为这样做不是一个好主意。

一个空string是Linux上唯一真正无效的path名,如果只需要一个无效的名字,这个名字可能适用于你。 你也可以使用像“ ///foo ”这样的string,虽然它可以引用一个文件(“ /foo ”),但它不是一个规范的path名。 另一种可能性就像“ /dev/null/foo ”,因为/dev/null具有POSIX定义的非目录含义。 如果你只需要不能引用常规文件的string,你可以使用“ / ”或“ . ”,因为这些都是目录。

我个人发现很多问题不是Linux,而是Linux上的应用程序。

以Amarok为例。 最近我注意到某些艺术家是从我的Windows机器上拷贝出来的,没有出现在库中。 我检查并确认文件在那里,然后我注意到,文件夹名称(以艺术家命名)中的某些字符被表示为一个奇怪的方形而不是实际的字符。

在shellterminal中,文件名看起来更奇怪:/ Music / Albums / Einst $'\ 374'rzende \ Neubauten是一个很奇怪的例子。

尽pipe这些文件确实存在,但Amarok由于某种原因无法看到它们。 我能够使用一些shell欺骗来重新命名他们为理智的版本,我可以使用Musicbrainz Picard重新命名为纯ASCII字符。 不幸的是,Picard在重新命名之前也无法打开这些文件,因此需要一个shell脚本。

总体而言,这是一个棘手的领域,如果您试图在Windows和Linux之间同步某个文件夹或文件名称包含时髦字符的音乐collections,它似乎变得非常棘手。

最安全的做法是坚持只有ASCII的文件名。