目前,我YYMMDD-NAME+PAGE
对大多数文件使用一个名称。NAME
将空格转换为下划线。
我想使用YYYY-MM-DD
日期格式,但我不知道如何将其与名称分开。-
如果名称以数字开头,则 A 看起来很奇怪。如果我使用_
,则它会与表示空格的下划线冲突。
哪些字符在文件名中比较安全?我使用的是 Linux,但我可能会与其他人共享文件(Windows 7、Mac OS X)。
答案1
概括:
- Windows:除 ASCII 的控制字符和
\/:*?"<>|
- Linux,OS-X:除 null 或
/
在所有平台上,最好避免使用不可打印字符,例如 ASCII 控制字符。
视窗
在 Windows 中,Windows 资源管理器不允许\/:*?"<>|
使用控制字符或空格。如果使用空格,则在从命令行使用时通常必须引用文件名(但据我所知,GUI 应用程序不受影响)。Windows 文件系统(例如 NTFS)显然将编码与文件名一起存储,但 UTF-16 是标准。
Windows 的某些部分区分大小写,而其他部分不区分大小写。在 Windows NTFS 文件系统上,很容易创建不同的文件名,如“Ab”和“ab”。这些名称指的是包含不同内容的单独文件。但是,尽管 Windows 命令提示符会很乐意使用 列出这两个文件dir
,但您无法使用 等命令轻松访问或操作其中一个文件type
。见下文。
Linux、OS-X
我认为,在 Linux 和 OS-X 中,只有/
可打印的 ASCII 集是被禁止的。某些字符(shell 元字符,如*?!
)会在命令行中引起问题,并且需要对文件名进行适当的引用或转义。
Linux 文件系统(例如 ext2、ext3)与字符集无关(我认为它们只是将其或多或少地视为字节流 - 仅/
禁止使用空值)。这意味着您可以以 UTF-8 编码存储文件名。我相信由 shell 或其他应用程序来决定使用哪种编码来正确转换文件名以进行显示或处理。
结论
因此,您可以安全地使用类似的方法✣
(如果输入起来不那么困难的话)
Windows 中区分大小写
C> dir /B
Ab
aB
аB
C> type Ab
b
b
C> type aB
b
b
C> type аB
unicode homograph
请注意,我们无法输入第二个文件的内容,Windowstype
命令只会返回 Ab 的内容。在 Linux 上,第三个文件也与 aB 不同。
(Windows 10 NTFS)。
答案2
虽然 RedGrittyBrick 的答案在技术上是正确的,但安全性并不是唯一的问题:可用性也很重要。我认为更好的问题是“文件名中适合使用哪些字符”。
一些潜在的指导原则:
- [0-9a-zA-Z_]- 字母数字字符和下划线始终可以使用。
\/:*?"<>|
和空字节至少在一个系统上存在问题,并且应该总是可以避免。- 空间在许多系统上用作参数分隔符,因此应尽可能避免使用带空格的文件名。其他空格(例如制表符)更是如此。
- 分号(;)用于在许多系统上分隔命令。 分号和逗号(,)用于分隔命令行参数(某些版本?)Windows 命令行。
[]()^ #%&!@:+={}'~
和[`]在许多 shell 中,它们都有特殊含义,而且很难处理,因此应该避免使用。它们还在 URL 中看起来很糟糕。- 主要角色避免:
- 许多命令行程序使用连字符 [-]来表明特殊参数。
- *nix 为基础的系统使用句号 [.]作为隐藏文件和目录的主角。
- 任何不在ASCII 集可能会对较旧的或较基本的系统(例如某些嵌入式系统)造成问题,因此应小心使用。
这基本上给你留下了:
[0-9a-zA-Z-._]
即总是使用起来安全且不烦人(只要文件名以字母数字开头):)
答案3
你可以:
- 将当前下划线替换为
#
(校对员的空格符号) - 文件名中的“部分”日期下划线(或第二个连字符 - 更容易输入)
Alt-1. 首字母大写可以替代空格:YYMMDD-HHMM-FileName.ext
或YYMMDD-HHMM_FileName.ext
使用最少的字符来清晰显示,并自动对一月至九月(以及每月 1 日至 9 日)进行填充零排序。
答案4
还要注意:不仅字符可能无效,而且文件名(字符组合)也可能无效。
在 Windows 上,这些文件名无效,因为它们是旧的设备名称:
CON PRN AUX NUL
COM0 COM1 COM2 COM3 COM4 COM5 COM6 COM7 COM8 COM9
LPT0 LPT1 LPT2 LPT3 LPT4 LPT5 LPT6 LPT7 LPT8 LPT9
更糟糕的是,此限制不区分大小写,因此例如Con
是无效的文件名。
更糟糕的是,您不能使用这些保留名称作为基本名称,因此例如Con.txt
是一个无效的文件名。
也可以看看:
- 在 Windows 中获取保留文件名
- 命名文件、路径和命名空间 § 命名约定
- 周边互换计划使用这些文件名作为设备名称
文件名的一个更为人熟知的限制是 255 个字节(而不是 255 个 Unicode 字符)的大小限制。
也可以看看: