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

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

我想要一个名为 的文件夹DELETED位于我的输出中的第一个ls

我可以在前面添加一个符号来导致这种情况吗?我已经尝试过了^,但-都不起作用。

答案1

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

ASCII 可打印字符按顺序为:

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

但这不一定对您有帮助,因为ls列出文件的顺序可能会受到当前区域设置的影响。

您可以以空格或!字符开头文件名,但这将导致在不引用文件的情况下很难引用该文件 - 而且区域设置可能会产生干扰。十进制数字之前的大多数其他 ASCII 字符也会有类似的问题。

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

 000_DELETED

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

答案2

在 GNU 系统上,至少在除 C/POSIX 之外的大多数语言环境中,有一些字符在排序时会被忽略。例如_.、空格或 0x1 就是这种情况。

这就是为什么.a, .c, __b,_d排序为.a, __b, .c,_d例如。

对于由以下组成的字符串仅有的那些被忽略字符,排序顺序是在区域设置中定义的,ASCII SPC 通常排在第一位。因此,单个空格字符将是首先排序的文件(甚至在 0x1(C 语言环境中的第一个).和之前..),然后是 2 个空格...等等。但是,<SPC>DELETED会排序 DELETED,因此,虽然名为的文件___会在大多数其他文件之前排序,但放在___其他字符串前面并不会使其排序更快。

在非忽略的字符中,ASCII 0 通常是非 C 语言环境中排在第一位的字符。

因此,名为 0 的文件将排在包含非忽略字符的任何其他文件之前。在包含非忽略字符的文件前面添加前缀0将使其在非 C 语言环境中排序更早。

因此,名为 的文件$'\01\01\01_000_DELETED'会在 C 语言环境中非常早地排序(因为 0x1 是第一个字符,因此首先排序),并且在其他语言环境中也会排序(因为所有 0x1 和 _ 都被忽略,但 s0是不可忽略的字符首先排序)。

在非 C 语言环境中,它仍然会排序 .或者..

另一种选择可能是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

相关内容