ディレクトリリストが完全にソートされていない


18

Debian Linuxシステムに次のディレクトリリストがあります。ただし、奇妙なことの1つは、populate.sqlファイルが他のファイルと共にソートされていないように見えることです。

-rw-r--r-- 1 user1 user1 10004 Jul 28 13:16 populate2.sql
-rw-r--r-- 1 user1 user1 10244 Jul 28 13:16 populate3.sql
-rw-r--r-- 1 user1 user1 10359 Jul 28 13:16 populate4.sql
-rw-r--r-- 1 user1 user1 11618 Jul 28 13:16 populate5.sql
-rw-r--r-- 1 user1 user1 11654 Jul 28 13:17 populate6.sql
-rw-r--r-- 1 user1 user1 12198 Jul 30 16:20 populate7.sql
-rw-r--r-- 1 user1 user1 12286 Aug 10 00:10 populate8.sql
-rw-r--r-- 1 user1 user1 12331 Aug 19 08:48 populate9.sql
-rw-r--r-- 1 user1 user1 12401 Aug 20 14:58 populatea.sql
-rw-r--r-- 1 user1 user1 12460 Aug 22 01:09 populateb.sql
-rw-r--r-- 1 user1 user1 12503 Aug 22 17:13 populatec.sql
-rw-r--r-- 1 user1 user1 13341 Aug 23 23:23 populated.sql
-rw-r--r-- 1 user1 user1 13414 Aug 27 23:01 populatee.sql
-rw-r--r-- 1 user1 user1 16064 Aug 31 00:03 populatef.sql
-rw-r--r-- 1 user1 user1 17529 Sep 16 15:38 populateg.sql
-rw-r--r-- 1 user1 user1 19348 Sep 19 22:50 populateh.sql
-rw-r--r-- 1 user1 user1 21033 Sep 27 20:46 populatei.sql
-rw-r--r-- 1 user1 user1 21024 Sep 28 00:02 populatej.sql
-rw-r--r-- 1 user1 user1 22505 Sep 28 22:55 populatek.sql
-rw-r--r-- 1 user1 user1 23831 Oct  5 21:24 populatel.sql
-rw-r--r-- 1 user1 user1 23665 Nov  2 22:16 populatem.sql
-rw-r--r-- 1 user1 user1 23513 Nov  4 21:53 populaten.sql
-rw-r--r-- 1 user1 user1 27191 Nov 19 14:55 populateo.sql
-rw-r--r-- 1 user1 user1 30142 Nov 28 17:51 populatep.sql
-rw-r--r-- 1 user1 user1 30853 Dec 10 14:49 populateq.sql
-rw-r--r-- 1 user1 user1 33690 Dec 11 23:43 populater.sql
-rw-r--r-- 1 user1 user1  9945 Jul 28 13:16 populate.sql
-rw-r--r-- 1 user1 user1 38696 Jan 16 22:27 populates.sql
-rw-r--r-- 1 user1 user1 38696 Jan 16 22:27 populatet.sql

最初は隠されたキャラクターか何かのせいかもしれないと思っていましたが、rとsの間にある隠されたキャラクターは考えられません。また、vim populate.sqlコマンドプロンプトに入力すると、正しいファイルが開きます。これは、奇妙な文字が存在しないことをさらに証明しています。

なぜpopulate.sql正しくソートされていないのですか?


1
これはLinuxシステムですか、Mac OS / BSDですか?(lsバージョンは異なります。)ソートの目的でピリオドが無視されているように見えますが、興味深いです。
ワイルドカード

@WildcardこれはDebian Linux上にあります
-kojow7

回答:


27

LC_COLLATEUnicode対応の照合では、たとえば、en_US.UTF-8句読点を無視する並べ替え順序になります。その結果、after but before populate.sqlとしてソートされます。populatesqlpopulatersqlpopulatessql

この動作の変更を確認するには、を実行してみてくださいLC_COLLATE=C ls -al。Cの並べ替え順序で(コードポイントやロケールに関係なく特定のバイトで)並べ替えられます。


2
面白い。Debianの最近のバージョンはデフォルトでそのようになっていますか、それを有効にするために変更した設定はありますか?以前にこの「問題」に遭遇したことはありませんか?
kojow7

私はそれがどのように、最近のか知りませんが、私はに使用されるデフォルトのロケールは常にC.なると信じていない
デヴィッド

1
LC _ *、LANG変数のいずれも設定されていない場合、デフォルトのロケールは常にC / POSIXですが、ほとんどのシステムにはデフォルトのロケールが設定されており、ユーザーは一般にログイン時にもロケールを指定できます。Debianで見られるGNU libcロケールのソート動作は、確かに10年以上そのようなものです。
ステファンシャゼラス

参考までに、新しいDebianインストールを試しました。はい、デフォルトではソート順の句読点を無視します。それ/etc/default/localeに言うLANG="en_US.UTF-8"
kojow7
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.