^
, 按 ASCII 顺序,跟在大写字母之后。-
在所有字母和数字之前,但在其他几个标点字符之后。
ASCII 可打印字符依次为:
!"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz{|}~
Run Code Online (Sandbox Code Playgroud)
但这不一定对您有帮助,因为ls
列表文件的顺序可能会受到当前语言环境的影响。
您可以使用空格或!
字符作为文件名的开头,但这会使得在不引用文件的情况下难以引用该文件——同样,区域设置可能会干扰。十进制数字之前的大多数其他 ASCII 字符都会有类似的问题。
假设您没有其他名称中包含奇数字符的文件,您最好的选择可能是以字符串0
s开头的文件名:
000_DELETED
Run Code Online (Sandbox Code Playgroud)
(我使用了类似的技术来命名 Thunderbird 和 Outlook 中的电子邮件文件夹。)
在 GNU 系统上,至少在 C/POSIX 以外的大多数语言环境中,有一些字符在排序时会被忽略。例如_
, .
, space 或 0x1就是这种情况。
这就是为什么.a
, .c
, __b
,_d
排序为.a
, __b
, .c
,_d
例如。
对于仅由那些被忽略的字符组成的字符串,排序顺序在语言环境中定义,ASCII SPC 通常排在最前面。因此,单个空格字符将是首先排序的文件(甚至在 0x1(C 语言环境中的第一个).
和 之前..
),然后是 2 个空格......等等。但是,<SPC>DELETED
会在 之后 排序DELETED
,所以虽然调用的文件___
会在排序之前大多数其他文件,放在___
其他一些字符串前面不会使它更快排序。
在非忽略字符中,ASCII 0 通常是在非 C 语言环境中排在最前面的字符。
因此,名为 0 的文件将排在包含非忽略字符之外的任何其他文件之前。预先考虑0
到包含非忽略的字符将使其排序早些时候在非英语语言环境的文件。
所以一个被调用的文件$'\01\01\01_000_DELETED'
会在 C 语言环境中很早地排序(因为 0x1 是第一个字符,所以首先排序),并且在其他语言环境中也是如此(因为所有 0x1 和 _ 都被忽略,但是0
s 是未被忽略的字符首先排序)。
在非 C 语言环境中,它仍然会在 .
or之后排序..
。
另一种选择可能是DELETED
仅使用忽略的字符来编写,例如" ?€£€?€?"
. 这些货币符号在排序时被忽略。SPC 在 C 语言环境中的排序也很早,因此它应该.
在 C 语言环境和非 C 语言环境中排序在前。
$ touch $' \u20ab\u20ac\u00a3\u20ac\u20ae\u20ac\u20ab' $'\01' ' ' 0normal-file $'\01\01\01_000_DELETED'
$ ls -1a
?€£€?€?
./
../
?
???_000_DELETED
0normal-file
$ LC_ALL=C ls -1a
?
???_000_DELETED
????????????????????
./
../
0normal-file
$ LC_COLLATE=C ls -1a
?
???_000_DELETED
?€£€?€?
./
../
0normal-file
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3036 次 |
最近记录: |