Tôi muốn một thư mục được gọi DELETED
là đầ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à -
và không hoạt động.
Tôi muốn một thư mục được gọi DELETED
là đầ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à -
và không hoạt động.
Câu trả lời:
^
, 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ự ls
liệ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 0
s:
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.)
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
, _d
loại như .a
, __b
, .c
, _d
ví 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) .
và ..
sau đó là 2 khoảng trắng, v.v. Tuy nhiên, <SPC>DELETED
sẽ 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 0
bị 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 đó 0
s 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 DELETED
chỉ 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
0x1
gì Có phải là ASCII SOH
?
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.
1
ký tự byte hoặc U+0001
unicode. Rằng nhân vật Star of Header có rất ít ý nghĩa ở đây.
ls DELETED
?