Tạo các tập tin sau trong một thư mục.
$ touch .a .b a b A B 你好嗎
ls
Thứ tự mặc định của tôi bỏ qua sự hiện diện của các dấu chấm hàng đầu, xen kẽ chúng với các tệp khác.
$ ls -Al
total 0
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 a
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .a
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 A
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 b
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .b
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 B
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:06 你好嗎
Tôi có thể thay đổi LC_COLLATE
để đặt dotfiles trước.
$ LC_COLLATE=C ls -Al
total 0
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .a
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .b
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 A
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 B
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 a
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 b
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:06 你好嗎
Thật không may, điều này làm cho thứ tự sắp xếp phân biệt chữ hoa chữ thường, tức là A
và B
trước a
và b
. Có cách nào để in dotfiles trước trong khi không phân biệt chữ hoa chữ thường ( A
và a
trước B
và b
) không?
Chỉnh sửa: cố gắng sửa đổi LC_COLLATE
Không có câu trả lời nào cho đến nay sao chép đầy đủ chức năng của ls
một cách dễ dàng. Có thể hiểu được, tôi có thể bọc một số trong số chúng trong một hàm, nhưng điều này sẽ phải bao gồm một số mã chi tiết về (ví dụ) cách làm việc không có đối số so với việc cung cấp một thư mục làm đối số. Hoặc làm thế nào để đối phó với một -d
cờ rõ ràng .
Ngoài ra, tôi nghĩ rằng có lẽ có thể LC_COLLATE
sử dụng tốt hơn . Tuy nhiên, tôi dường như không thể làm cho công việc đó. Tôi hiện đang sử dụng LC_COLLATE="en_AU.UTF-8"
. Tôi đã kiểm tra /usr/share/i18n/locales/en_AU
(mặc dù tôi không chắc đây có phải là tệp đúng không, vì tôi không thể thấy bất kỳ tài liệu tham khảo nào UTF-8
); Tôi tìm thấy như sau.
LC_COLLATE
copy "iso14651_t1"
END LC_COLLATE
/usr/share/i18n/locales/iso14651_t1
chứa copy "iso14651_t1_common"
. Cuối cùng, /usr/share/i18n/locales/iso14651_t1_common
chứa
<U002E> IGNORE;IGNORE;IGNORE;<U002E> # 47 .
Tôi đã xóa dòng này, chạy sudo locale-gen
và khởi động lại máy tính của tôi. Thật không may, điều này không thay đổi gì.