Làm cách nào để liệt kê các thư mục có dấu gạch dưới trước?


23

Vì vậy, cũng như mọi người, trước khi sử dụng Ubuntu, tôi đã sử dụng máy Windows và một trong những điều tôi đã quen với Windows là sử dụng dấu gạch dưới làm ký tự đầu tiên của tên thư mục như một loại đánh dấu đặc biệt để nó có thể xuất hiện đầu tiên trên danh sách, cả trong dòng lệnh và trình thám hiểm tệp.

Chẳng hạn, trong thư mục Sách điện tử của tôi (trong Windows) trông giống như thế này:

_read
      Book1.pdf
      Book2.pdf
_reading
      Book3.pdf
Book4.pdf
Book5.pdf

nhưng trong Nautilus của Ubuntu thì nó trông như thế này:

Book4.pdf
Book5.pdf    
_read
      Book1.pdf
      Book2.pdf
_reading
      Book3.pdf

Điều đang xảy ra là nó hoàn toàn bỏ qua dấu gạch dưới và nó coi "_read" là "đã đọc" và do đó không liệt kê nó trước như mong muốn.

Tôi đã thử đặt biến môi trường LC_COLLATE thành C. Điều này giúp bằng cách nào đó vì nó liệt kê các dấu gạch dưới cùng nhau, nhưng ở cuối, và không phải ở đầu.

Cảm ơn.


bạn có thể bao gồm một ảnh chụp màn hình?
philshem

Bản sao có thể có của Askubfox.com/questions/115741/ Mặc dù tôi nghĩ câu trả lời của @ maggotbrain tốt hơn câu trả lời được trình bày ở đó.
rudivonstaden

Câu trả lời:


16

Vì bạn chưa chỉ định miền mà bạn hiện đang sử dụng, giải pháp này giả định rằng bạn đang sử dụng en_US.UTF-8làm mặc định.

Bạn có thể kiểm tra điều này bằng cách chạy lệnh localetừ dòng lệnh ( Ctrl+ Alt+ t).

Ví dụ:

~ $ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Biến ảnh hưởng đến thứ tự sắp xếp của các tệp được gọi là LC_COLLATE .

Theo các trang trợ giúp của Ubuntu , biến LC_COLLATE xác định "Cách các chuỗi (tên tệp ...) được sắp xếp theo thứ tự bảng chữ cái. Sử dụng ngôn ngữ" C "hoặc" POSIX "ở đây dẫn đến thứ tự sắp xếp giống strcmp (), có thể là thích hợp hơn với các ngôn ngữ cụ thể theo ngôn ngữ. "

Thứ tự sắp xếp sẽ cần phải được thay đổi từ LC_COLLATE="en_US.UTF-8"thành LC_COLLATE=C.

Từ dòng lệnh ( Ctrl+ Alt+ t), nhập:

update-locale LC_COLLATE=C

Quan trọng: Bạn cần đăng xuất khỏi hệ thống của mình và sau đó đăng nhập lại để những thay đổi có hiệu lực .

Chạy lại localelệnh, nó sẽ hiển thị rằng LC_COLLATEbiến đã được thay đổi thành công. Chạy lệnh ls -lmột lần nữa sẽ phản ánh sự thay đổi này.


1
Tôi đã đặt LC_COLLATE thành C, như tôi đã mô tả trong đoạn cuối của câu hỏi. Tuy nhiên, tôi vẫn nhận được các kết quả khác nhau trong cả thiết bị đầu cuối và trình thám hiểm nautilus và trong khi đó tôi đã khởi động lại máy tính. Bất cứ ý tưởng tại sao điều đó xảy ra?
nunos

@nunos Bạn có bí danh nào được đặt lstrong .bashrckhông?
Kevin Bowen

@nunos Thú vị. Những loại hệ thống tập tin bạn đang kiểm tra này? Nơi duy nhất mà tôi gặp vấn đề với ls -lviệc sắp xếp là trên một ổ đĩa được định dạng ntfs không xuất hiện để tôn vinh biến LC_COLLATE. Tất cả các hệ thống tập tin ext3 của tôi dường như tôn trọng cài đặt đó bằng cách sử dụng lệnh ls cũng như trong Thunar và Nautilus.
Kevin Bowen

đó rất có thể là vấn đề sau đó Tôi đang sử dụng ls -llệnh trên ổ đĩa NTFS, vì tôi có khởi động kép với các cửa sổ.
nunos

2
update-locale LC_COLLATE=Ckhông giúp lấy các thư mục có dấu gạch dưới ở đầu danh sách được sắp xếp nếu bạn sử dụng chữ in hoa ở đầu tên thư mục của bạn!
malisokan

1

caja (và tôi nghĩ Nautilus trước nó) có một tùy chọn trong Tùy chọn để sắp xếp các thư mục trước các tệp. Điều đó sẽ giúp?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.