对文件进行排序时包含特殊字符

对文件进行排序时包含特殊字符


我试图让 Linux 在对文件名进行排序时包含特殊字符。我想要实现的排序顺序是:首先是所有特殊字符,然后是数字,然后是字母(不区分大小写)。

Linux 中的默认排序完全忽略特殊字符(请参阅示例中的第一列“ls-before”)。

我发现的一个建议是使用LC-COLLATE=Cor LC_ALL=C。这确实考虑了特殊字符,但它们的排序方式很奇怪:有些在数字之前排序,有些在数字和大写字母之间排序,下划线放在大写和小写字母之间。所有大写字母都位于所有小写字母之前。也不是我想要的(示例中的第二列)。

我尝试过编辑 /usr/share/i18n/locales/iso14651_t1_common:将带有特殊字符的行从 更改IGNORE;IGNORE;IGNORE<RES-1>;IGNORE;IGNORE

例如<U005F> IGNORE;IGNORE;IGNORE;<U005F> # 33 _
<U005F> <RES-1>;IGNORE;IGNORE;<U005F> # 33 _

然后我重新编译了语言环境(en_GB)sudo localedef -i en_GB -f UTF-8 -vc en_GB(我没有更改语言环境本身)

现在对文件进行排序确实包含特殊字符,并且它们都出现在数字之前(这就是我想要的),但特殊字符似乎仅用于分组,而不用于排序(请参阅示例中的“ls-after”列)。排序似乎是基于特殊字符后面的字符。对特殊字符进行排序应该产生更类似于“所需”列的结果。

例子:


    ls-before     LC_COLLATE=C   caja        nemo      ls-after  desired
    -----------   ------------   -----       -----     --------  -------
    1             %b             1           1         =a        =a
    11            1              2           2         _a        =b
    111           11             3           3         =b        _a
    2             111            11          11        _b        _b
    3             2              111         111       %b        %b
    a             3              =a          a         1         ..
    =a            =a             _a          =a        11        ..
    _a            =b             =b          _a        111       .. 
    A             A              _b          A         2         ..
    aa            AA             %b          aa        3         ..
    AA            AB             a           AA        a         ..
    ab            Ab             A           ab        A         .. 
    a_b           B              a_b         a_b       a_b       a_b
    a-b           BB             a-b         a-b       a-b       a_c 
    a#b           _a             a#b         a#b       a#b       a_C
    a%b           _b             a%b         a%b       a%b       a-b
    aB            a              a_c         aB        a_c       a-c 
    Ab            a#b            a-c         Ab        a-c       a#c
    AB            a%b            a_C         AB        a_C       a&c
    ac            a-b            aa          ac        aa        ..
    a_c           a-c            AA          a_c       AA        ..
    a-c           aB             ab          a-c       ab        ..
    a_C           a_C            aB          a_C       aB        ..
    b             a_b            Ab          b         Ab        ..
    =b            a_c            AB          =b        AB        ..
    _b            aa             ac          _b        ac        ..
    %b            ab             b           %b        b         ..
    B             ac             B           B         B         ..
    bb            b              bb          bb        bb        ..
    BB            bb             BB          BB        BB        ..

有谁知道如何真正对特殊字符进行排序而不是仅仅对它们进行分组?

顺便说一句,我希望所有应用程序都遵循新的排序,但看起来每个应用程序都有自己的文件排序规则(请参阅“caja”和“nemo”列)。有没有办法强制每个应用程序遵循相同的排序,或者排序是在应用程序中硬编码的?我的交替iso14651_t1_common对 Nemo 中的排序没有影响,但使 Caja 表现得像 Nemo。

使用 Linux mint 18.3 伴侣。不确定这是否重要,但我使用的是双引导系统,数据位于 NTFS 驱动器上,因此任何解决方案也应该适用于 NTFS。

谢谢!

相关内容