ファイル名を並べ替えるときに、Linuxで特殊文字を含めようとします。私が達成したいソート順は、すべての特殊文字を最初に使用してから、数字、文字(大文字と小文字を区別しない)です。
Linuxのデフォルトのソートは特殊文字を完全に無視します(例の最初の列「ls-before」を参照)。
LC-COLLATE=C
私が見つけた提案の1つはorを使用することですLC_ALL=C
。これは特殊文字を考慮しますが、奇妙な方法でソートされます。一部は数字の前に配置され、一部は数字と大文字の間に配置され、下線は大文字と小文字の間に配置されます。すべての大文字はすべての小文字よりも優先されます。私が望むものではありません(例の2番目の列)。
私はEDITを試しました。/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
ネモのソートには影響しませんが、Cajaはネモのように動作します。
Linux mint 18.3 コンパニオンを使用します。これが重要かどうかはわかりませんが、デュアルブートシステムを使用していてデータがNTFSドライブにあるため、すべてのソリューションがNTFSでも機能する必要があります。
ありがとうございます!