Daftar direktori tidak sepenuhnya diurutkan

18

Saya memiliki daftar direktori berikut pada sistem Linux Debian. Namun, satu hal yang aneh adalah bahwa file populate.sql tampaknya tidak dapat disortir dengan yang lain.

-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

Pada awalnya saya pikir itu mungkin karena karakter tersembunyi atau sesuatu, tetapi saya tidak bisa memikirkan karakter tersembunyi yang akan muncul antara r dan s. Juga, jika saya mengetikkan vim populate.sqlcommand prompt itu akan membuka file yang benar yang merupakan bukti lebih lanjut tidak ada karakter aneh di sana.

Adakah ide mengapa populate.sqltidak disortir dengan benar?

kojow7
sumber
1
Apakah ini pada sistem Linux atau Mac OS / BSD? ( lsVersi-versinya berbeda.) Sepertinya periode ini sedang diabaikan untuk tujuan penyortiran, yang menarik.
Wildcard
@Wildcard Ada di Debian Linux
kojow7

Jawaban:

27

LC_COLLATEdengan collation-aware Unicode, misalnya en_US.UTF-8menghasilkan urutan yang mengabaikan tanda baca. Akibatnya, populate.sqlmacam seperti populatesqlsetelah populatersqltapi sebelumnya populatessql.

Jika Anda ingin melihat perubahan perilaku ini, coba jalankan LC_COLLATE=C ls -al, dan itu akan diurutkan dalam urutan pengurutan C (berdasarkan byte spesifik tanpa memperhatikan codepoints atau locales).

David
sumber
2
Menarik. Apakah versi terbaru Debian seperti itu secara default atau apakah ada pengaturan yang akan saya ubah untuk mengaktifkannya? Saya tidak ingat pernah mengalami 'masalah' ini sebelumnya?
kojow7
Saya tidak tahu seberapa baru atau tidaknya itu, tetapi saya percaya bahwa bahasa default yang digunakan adalah C.
David
1
Ketika tidak ada LC_ *, variabel LANG yang ditetapkan, lokal default adalah dan selalu C / POSIX, tetapi sebagian besar sistem memiliki konfigurasi lokal default dan pengguna umumnya dapat menentukan satu pada waktu login juga. Perilaku penyortiran lokal libc GNU seperti yang ditemukan di Debian sudah seperti itu selama lebih dari 10 tahun.
Stéphane Chazelas
Hanya untuk referensi, saya sudah mencoba menginstal Debian baru dan ya, itu mengabaikan tanda baca dalam urutan pengurutan secara default. Di /etc/default/localedalamnya tertulis LANG="en_US.UTF-8".
kojow7