将首先出现在 `ls` 输出中的符号?

jay*_*ynp 7 ls

我想要一个名为的文件夹DELETED在我的ls.

有没有我可以在前面添加的符号会导致这种情况?我试着^-既不工作。

Kei*_*son 9

^, 按 ASCII 顺序,跟在大写字母之后。-在所有字母和数字之前,但在其他几个标点字符之后。

ASCII 可打印字符依次为:

 !"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz{|}~
Run Code Online (Sandbox Code Playgroud)

但这不一定对您有帮助,因为ls列表文件的顺序可能会受到当前语言环境的影响。

您可以使用空格或!字符作为文件名的开头,但这会使得在不引用文件的情况下难以引用该文件——同样,区域设置可能会干扰。十进制数字之前的大多数其他 ASCII 字符都会有类似的问题。

假设您没有其他名称中包含奇数字符的文件,您最好的选择可能是以字符串0s开头的文件名:

 000_DELETED
Run Code Online (Sandbox Code Playgroud)

(我使用了类似的技术来命名 Thunderbird 和 Outlook 中的电子邮件文件夹。)


Sté*_*las 8

在 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 和 _ 都被忽略,但是0s 是未被忽略的字符首先排序)。

在非 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)