目前,YYMMDD-NAME+PAGE
大多数文件都使用一个名称。NAME
将空格转换为下划线。
我想使用YYYY-MM-DD
日期格式,但是我不确定如何将其与名称分开。-
如果名称以数字开头,则A 看起来很奇怪。如果使用_
,则它与代表空格的下划线冲突。
文件名中哪些字符在这里可以安全使用?我使用的是Linux,但我可能会与其他人共享文件(Windows 7,Mac OS X)。
目前,YYMMDD-NAME+PAGE
大多数文件都使用一个名称。NAME
将空格转换为下划线。
我想使用YYYY-MM-DD
日期格式,但是我不确定如何将其与名称分开。-
如果名称以数字开头,则A 看起来很奇怪。如果使用_
,则它与代表空格的下划线冲突。
文件名中哪些字符在这里可以安全使用?我使用的是Linux,但我可能会与其他人共享文件(Windows 7,Mac OS X)。
Answers:
摘要:
\/:*?"<>|
/
在所有平台上,最好避免使用不可打印的字符,例如ASCII控制字符。
视窗
在Windows中,Windows资源管理器不允许使用控制字符,\/:*?"<>|
也可以使用空格。如果使用空格,则从命令行使用时,通常必须用引号引起来(但据我所知,GUI应用程序不受影响)。Windows文件系统(例如NTFS)显然使用文件名存储编码,但是UTF-16是标准的。
Windows的某些部分区分大小写,其他部分不区分大小写。在Windows NTFS文件系统上创建不同的文件名(如“ Ab”和“ ab”)很容易。这些名称是指包含不同单独内容的单独文件。但是,尽管Windows命令提示符将愉快地使用列出这两个文件dir
,但是您无法使用诸如之类的命令轻松访问或操作其中一个文件type
。见下文。
Linux,OS-X
/
我相信,在Linux和OS-X中,仅可打印的ASCII集被禁止。某些字符(如shell的元字符*?!
)会在命令行中引起问题,并要求文件名用适当的引号引起来或转义。
诸如ext2,ext3之类的Linux文件系统是字符集不可知的(我认为它们或多或少将其视为字节流-只能为空,并且/
被禁止)。这意味着您可以使用UTF-8编码存储文件名。我相信要由外壳程序或其他应用程序知道使用哪种编码来正确转换文件名以进行显示或处理。
结论
因此,您可能可以安全地使用类似的内容✣
(如果输入起来不是那么困难)
Windows中的区分大小写
C> dir /B
Ab
aB
аB
C> type Ab
b
b
C> type aB
b
b
C> type аB
unicode homograph
请注意,我们无法键入第二个文件的内容,Windows type
命令仅返回Ab的内容。第三个文件也将不同于Linux上的aB。
(Windows 10 NTFS)。
尽管RedGrittyBrick的回答在技术上是正确的,但安全性不是唯一的问题:可用性也很重要。我认为一个更好的问题是“在文件名中使用什么字符比较好”。
一些潜在的准则:
\/:*?"<>|
和空字节在至少一个系统上是有问题的,应始终避免。[]()^ #%&!@:+={}'~
和[`]在许多shell中都具有特殊含义,并且很烦人,因此应避免使用。它们在URL中也看起来很可怕。这基本上使您拥有:
那些总是安全的,而不是恼人的使用(只要你启动文件名以字母数字):)
[]
)是正则表达式的一部分,并且在shell中也具有特殊含义。但是,除了一些邪恶的案例外,它们并没有那么糟糕。
()
实际上也可以这样说。
[]()^;
,所以我认为正确的答案实际上可能是[0-9a-zA-Z.,_-]
逗号,也可能只是因为它在文件名中很奇怪而被排除了,尽管我不认为这会导致问题。
echo whereami > a,b,c
在Win10命令提示符窗口中尝试。