Symbol, das zuerst in der Ausgabe von `ls` angezeigt wird?

7

Ich möchte, dass ein Ordner mit dem Namen DELETEDan erster Stelle in meiner Ausgabe von steht ls.

Gibt es ein Symbol, das ich an der Vorderseite hinzufügen kann, um dies zu verursachen? Ich habe versucht , ^und , -und weder funktioniert.

jaynp
quelle
Ich bin mir nicht sicher, ob ich Ihre Frage richtig verstehe. Suchen Sie zufällig ls DELETED?
Ramesh

Antworten:

9

^folgt in ASCII-Reihenfolge den Großbuchstaben. -steht vor allen Buchstaben und Ziffern, folgt jedoch mehreren anderen Satzzeichen.

Die ASCII-druckbaren Zeichen sind in der Reihenfolge:

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

Dies hilft Ihnen jedoch nicht unbedingt, da die Reihenfolge, in der lsListen aufgelistet werden, möglicherweise vom aktuellen Gebietsschema beeinflusst wird.

Sie könnten den Dateinamen mit einem Leerzeichen oder !Zeichen beginnen, aber das wird es schwierig machen, auf die Datei zu verweisen, ohne sie zu zitieren - und auch hier könnten die Gebietsschemaeinstellungen stören. Die meisten anderen ASCII-Zeichen vor den Dezimalstellen haben ähnliche Probleme.

Angenommen, Sie haben keine anderen Dateien mit ungeraden Zeichen im Namen, beginnen Sie den Dateinamen möglicherweise mit einer Zeichenfolge von 0s:

 000_DELETED

(Ich habe eine ähnliche Technik verwendet, um E-Mail-Ordner in Thunderbird und Outlook zu benennen.)

Keith Thompson
quelle
8

Auf GNU-Systemen gibt es zumindest in den meisten anderen Gebietsschemas als C / POSIX einige Zeichen, die beim Sortieren ignoriert werden. Das ist zum Beispiel der Fall von _, ., Raum oder 0x1.

Deshalb .a, .c, __b, _dArt , wie .a, __b, .c, _dzum Beispiel.

Bei Zeichenfolgen, die nur aus diesen ignorierten Zeichen bestehen, wird die Sortierreihenfolge im Gebietsschema definiert. ASCII SPC steht im Allgemeinen an erster Stelle. So ein einzelne Leerzeichen würde die Datei sein , dass erste Art (auch vor 0x1 (die ersten in C locale), .und ..), dann zwei Räume ... etc., jedoch <SPC>DELETEDwürde Art nach DELETED , also , während eine Datei mit dem Namen ___sortieren würde vor Bei den meisten anderen Dateien wird das ___Sortieren vor einer anderen Zeichenfolge nicht früher durchgeführt.

Unter den nicht ignorierten Zeichen ist ASCII 0 im Allgemeinen das Zeichen, das zuerst in Nicht-C-Gebietsschemas sortiert wird.

Eine Datei mit dem Namen 0 würde also vor jeder anderen Datei sortieren, die nicht ignorierte Zeichen enthält. Wenn Sie 0einer Datei voranstellen , die nicht ignorierte Zeichen enthält, wird sie in Nicht-C-Gebietsschemas früher sortiert.

Eine aufgerufene Datei $'\01\01\01_000_DELETED'würde also sehr früh im C-Gebietsschema sortieren (weil 0x1 das erste Zeichen ist, das zuerst sortiert wird) und auch in anderen Gebietsschemas (weil alle 0x1 und _ ignoriert werden, aber dann sind die 0s die nicht ignorierten Zeichen diese Art zuerst).

In Nicht-C-Gebietsschemas wird immer noch nach . oder sortiert ...

Eine andere Möglichkeit könnte sein, DELETEDnur mit ignorierten Zeichen wie zu schreiben " ₫€£€₮€₫". Diese Währungssymbole werden beim Sortieren ignoriert. SPC wird auch ziemlich früh im Gebietsschema C sortiert, daher sollte es .sowohl im Gebietsschema C als auch außerhalb des Gebietsschemas C sortiert werden .

$ 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
Stéphane Chazelas
quelle
Was ist 0x1? Ist es das ASCII SOH?
Terdon
@terdon: Ja, es ist SOH(Zeichencode 1). Das Zeichen mit dem ASCII-Code 0 ( NUL) ist in Unix-Dateinamen nicht zulässig. 1 ist der nächste Zeichencode in numerischer Reihenfolge danach. Es hat in den meisten modernen Computersystemen keine andere besondere Bedeutung.
Ilmari Karonen
@IlmariKaronen so ist es SOHwie gesagt? Ich bin nicht mit Hex vertraut.
Terdon
@terdon, was für das Gebietsschema C wichtig ist, ist, dass es der erste Codepunkt ist, der in einem Dateinamen zulässig ist, dass es sich um das 1Byte- oder U+0001Unicode-Zeichen handelt. Dass es sich um den Star of Header- Charakter handelt, hat hier wenig Bedeutung.
Stéphane Chazelas