将项目放在Linux的字母列表的末尾
1. 概述
在本文中,我们将研究在 Linux 中将项目放在字母列表末尾的不同方法。例如,这发生在文件夹排序中,我们将在本文中处理这种情况。
在处理包含多个子目录和文件的文件夹时,我们可能只对快速检查其中的一部分感兴趣。它们的命名决定了我们是否可以直接看到它们,或者我们是否需要使用鼠标滚轮滚动。使用 GUI(图形用户界面)时,将这些感兴趣的文件夹显示在屏幕顶部通常很方便。
但是,*在使用 CLI(命令行界面)时,***由于终端的行数有限并且命令提示符位于底部,我们希望在列表底部看到这些。这是我们将在整篇文章中使用的示例。
2. Linux排序
在继续讨论问题的解决方案之前,我们需要讨论按字母顺序排序的含义。很明显字母a在z之前。但是大写字母呢?符号?数字是在字母之前还是之后列出的?
区域设置决定了许多属性,例如小数点分隔符、日期顺序、日期名称和排序顺序。环境变量LC_ALL覆盖了大部分这些本地化设置。与排序相关的环境变量是LC_COLLATE。
LC_COLLATE变量的某些可能值 不符合 POSIX。如果LC_COLLATE=en_US.UTF-8,字母集*[a,b,A,B]*排序(使用命令sort )为:
$ LC_COLLATE=en_US.UTF-8 sort <<< $'a\nb\nA\nB'
a
A
b
B
但是,当使用LC_COLLATE=C和与以前相同的一组字母时:
$ LC_COLLATE=C sort <<< $'a\nb\nA\nB'
A
B
a
b
对于本文的其余部分,我们将假设排序设置为LC_COLLATE=C,这可确保按字节排序。如果我们希望排序在我们的系统中持久存在,我们可能需要设置环境变量 。
3. 解决方案
我们将讨论三种不同的解决方案,可以遵循这些解决方案来实现特定的文件或文件夹排序。
3.1. 简单方法
如果我们想在列表的末尾有一个文件夹(没有那么多元素),一个有趣的选择是简单地将文件夹的名称更改为同义词,该同义词也将标识其内容,但其名称以字母开头后来在字母表中。
例如,假设我们在一个方向上有一个特定的文件夹来存储Archives。使用ls 命令,我们可以看到内容:
$ ls -1
Archives
Downloads
Music
Photos
我们可能希望在整个目录中移动时快速检查文件夹是否存在。因此,如果我们将它重命名(使用mv 命令)为Records,我们将在等待更多输入的 shell 提示符之前看到它:
$ mv Archives Records
$ ls -1
Downloads
Music
Photos
Records
$
这样,我们就可以重新组织文件夹中的内容,而不必使用奇怪的命名约定或非常规字符。
3.2. 直截了当的方法
如果我们有一个包含许多文件夹和文件的非常拥挤的目录,那么之前的方法将行不通。因此,另一种解决方案是更改文件夹名称的首字母(或首字母),使其出现在目录的开头或结尾。
在 Linux 中,只有两个保留字节不能用于命名文件夹和目录。它们是 0(空的 ASCII 值)和 0x2f(正斜杠的 ASCII 等效值)。但是,我们应该记住,如果我们希望文件系统也可以从其他操作系统(例如 Windows)访问,则可以使用一些额外的保留值,例如反斜杠、星号(star)或问号。
大写字母排在小写字母之前,因此最后列出的字母是z。因此,如果我们在文件夹的实际名称前加上给定数量的z,我们就可以模拟自定义目录排序:
$ ls -1
Folder
ZZFolder
ZzFolder
zZFolder
zzFolder
另一种选择是不采用最后一个字母,而是采用 ASCII 可用符号中的最后一个符号,即*~(代字号)。事实上,以下列表显示了所有排序的字符(根据排序规则LC_COLLATE=C*):
!"#$%&'()*+,-.h/0123456789:;<=>[[email protected]](/cdn_cgi/l/email_protection)[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
因此,如果我们在名称前面加上一个排序晚于z的字符,我们就可以在上一个示例中的zzFolder之后拥有文件夹:
$ ls -1
Folder
ZZFolder
ZzFolder
zZFolder
zzFolder
'~Folder'
'~ZFolder'
'~zFolder'
3.3. 特殊字符
除了上一节中列出的字符之外,还有其他字符,但它们不在 ASCII 集内。**它们属于 Unicode 集,排在 ASCII 集之后。**因其低调的外表而使用最多的一些角色是:
- *·*是中间点 (U+00B7)
- ÷是除号 (U+00F7)
- Ɩ是大写字母 (U+0196)
它们并非在所有键盘上都可用,而且检索起来可能很复杂。而且,尽管在图形用户界面上使用它们很常见,但在使用命令行界面时它们可能会造成麻烦。但是,使用时,以前的目录如下所示:
$ ls -1
Folder
ZZFolder
ZzFolder
zZFolder
zzFolder
'~Folder'
'~ZFolder'
'~zFolder'
·Folder
÷Folder
ƖFolder
要查看这些符号,终端应该能够处理 Unicode。**这些特殊字符使用起来可能并不完全安全,因为它们会返回不一致的结果。**例如,它们往往会破坏无法处理 Unicode 字符的脚本。
最后,我们还有私人使用的角色 。但是,我们真的不鼓励使用它们,因为它们的缺点多于优点,所以我们不会在这里讨论它们。