Biểu tượng sẽ xuất hiện đầu tiên trong đầu ra của `ls`?


7

Tôi muốn một thư mục được gọi DELETEDlà đầu tiên trong đầu ra của tôi ls.

Có một biểu tượng tôi có thể thêm vào phía trước có thể gây ra điều này? Tôi đã thử ^-và không hoạt động.


Tôi không chắc chắn nếu tôi hiểu chính xác câu hỏi của bạn. Bạn có bất kỳ cơ hội tìm kiếm ls DELETED?
Ramesh

Câu trả lời:


9

^, theo thứ tự ASCII, theo các chữ cái viết hoa. -đứng trước tất cả các chữ cái và chữ số, nhưng theo sau một số ký tự dấu chấm câu khác.

Các ký tự có thể in ASCII, theo thứ tự, là:

 !"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxyz{|}~

Nhưng điều này không nhất thiết giúp bạn, vì thứ tự lsliệt kê các tệp có thể bị ảnh hưởng bởi miền địa phương hiện tại.

Bạn có thể bắt đầu tên tệp bằng dấu cách hoặc !ký tự, nhưng điều đó sẽ gây khó khăn cho việc tham chiếu tệp mà không trích dẫn nó - và một lần nữa, cài đặt ngôn ngữ có thể can thiệp. Hầu hết các ký tự ASCII khác đứng trước các chữ số thập phân sẽ có vấn đề tương tự.

Đặt cược tốt nhất của bạn, giả sử bạn không có các tệp khác có ký tự lẻ trong tên của chúng, có thể là bắt đầu tên tệp bằng một chuỗi 0s:

 000_DELETED

(Tôi đã sử dụng một kỹ thuật tương tự để đặt tên cho các thư mục email trong Thunderbird và Outlook.)


8

Trên các hệ thống GNU ít nhất là ở hầu hết các địa điểm khác ngoài C / POSIX, có một vài ký tự bị bỏ qua liên quan đến việc sắp xếp. Đó là trường hợp ví dụ của _, ., không gian hoặc 0x1.

Đó là lý do tại sao .a, .c, __b, _dloại như .a, __b, .c, _dví dụ.

Đối với các chuỗi chỉ bao gồm các ký tự bị bỏ qua đó , thứ tự sắp xếp được xác định trong miền địa phương, ASCII SPC thường xuất hiện trước. Vì vậy, một ký tự khoảng trắng sẽ là tệp sắp xếp đầu tiên (thậm chí trước 0x1 (ký tự đầu tiên trong ngôn ngữ C) ...sau đó là 2 khoảng trắng, v.v. Tuy nhiên, <SPC>DELETEDsẽ sắp xếp sau DELETED , vì vậy trong khi một tệp được gọi ___sẽ sắp xếp trước hầu hết các tệp khác, đặt ___trước một số chuỗi khác sẽ không sắp xếp sớm hơn.

Trong số các ký tự không bị bỏ qua, ASCII 0 nói chung là ký tự sắp xếp đầu tiên ở các địa phương không C.

Vì vậy, một tệp có tên 0 sẽ sắp xếp trước bất kỳ tệp nào khác ngoài các ký tự không bị bỏ qua. Chuẩn 0bị một tệp chứa các ký tự không bị bỏ qua sẽ khiến nó được sắp xếp sớm hơn trong các ngôn ngữ không phải là C.

Vì vậy, một tệp được gọi $'\01\01\01_000_DELETED'sẽ sắp xếp rất sớm trong ngôn ngữ C (vì 0x1 là ký tự đầu tiên được sắp xếp trước) và cả ở các địa phương khác (vì tất cả 0x1 và _ đều bị bỏ qua, nhưng sau đó 0s là các ký tự không bị bỏ qua mà sắp xếp trước).

Trong các địa phương không C, nó vẫn sẽ sắp xếp sau . hoặc ...

Một lựa chọn khác có thể là viết DELETEDchỉ với các ký tự bị bỏ qua như " ₫€£€₮€₫". Những biểu tượng tiền tệ được bỏ qua sắp xếp wrt. SPC cũng sắp xếp khá sớm trong miền địa phương C, vì vậy nó nên sắp xếp trước .cả ở địa phương C và không C.

$ touch $'   \u20ab\u20ac\u00a3\u20ac\u20ae\u20ac\u20ab' $'\01' ' ' 0normal-file $'\01\01\01_000_DELETED'
$ ls -1a

   ₫€£€₮€₫
./
../
?
???_000_DELETED
0normal-file
$ LC_ALL=C ls -1a
?
???_000_DELETED

   ????????????????????
./
../
0normal-file
$ LC_COLLATE=C ls -1a
?
???_000_DELETED

   ₫€£€₮€₫
./
../
0normal-file

0x1gì Có phải là ASCII SOH?
terdon

@terdon: Vâng, đó là SOH(mã ký tự 1). Ký tự có mã ASCII 0 ( NUL) không được phép trong tên tệp Unix; 1 là mã ký tự tiếp theo theo thứ tự số sau nó. Nó không có ý nghĩa đặc biệt khác trong hầu hết các hệ thống máy tính hiện đại.
Ilmari Karonen

@IlmariKaronen vậy có SOHđúng như tôi nói không? Tôi không nói chuyện trong hex.
terdon

@terdon, điều quan trọng đối với miền địa phương C là điểm mã đầu tiên được phép trong tên tệp, đó là 1ký tự byte hoặc U+0001unicode. Rằng nhân vật Star of Header có rất ít ý nghĩa ở đây.
Stéphane Chazelas
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.