Die Ausgabe von / bin / ls stimmt nicht mit der Manpage überein


7

ls Manpage sagt:

List  information  about  the FILEs (the current directory by
default).  Sort entries alphabetically if none of -cftuvSUX nor --sort
is specified.

und

-a, --all    do not ignore entries starting with .

und

-1     list one file per line.

aber

/bin/ls -a1

listet Einträge alphabetisch nach dem Dateinamen auf, wobei alle führenden .entfernt werden, was nicht alphabetisch ist.

Der sortBefehl macht dasselbe.

Gibt es eine Möglichkeit, lsauf normale Weise zur Arbeit zu kommen (zuerst mit .Dateien - was auch nicht alphabetisch ist)?


4
Der Punkt ist nicht im Alphabet enthalten, daher ist er laut Antwort des Stahlfahrers vom Gebietsschema abhängig.
Wjandrea

Sie verstehen, dass Dateien und Ordner, die mit beginnen, .versteckt sind, richtig?
Terrance

1
Ich denke, deshalb nutzt das OP die -aOption.
Arronical

Es macht genau das, was auf der Manpage steht: die Dateien alphabetisch sortieren. Es hört sich so an, als ob Sie sie stattdessen in ASCIIbetical-Reihenfolge sortieren möchten.
Mark

Wenn es alphabetisch sortiert wäre, wären alle Punktdateien irgendwo zusammen. Sie sind nicht. Sie sind nach dem Zeichen nach dem Punkt verstreut. Die Sortierung erfolgt nach dem ersten alphabetischen Zeichen, das keine Sortierung im Dateinamen ist.
David Ledger

Antworten:


12

Die Reihenfolge wird durch die Sortierreihenfolge Ihres Gebietsschemas bestimmt.

Ex. in meinem Standardgebietsschema (welches ist en_CA.UTF-8)

$ ls -A1
a
.b
c

während im CGebietsschema

$ LC_COLLATE=C ls -A1
.b
a
c

(Ich habe verwendet, -Aanstatt -adie .und ..Verzeichnisse zu entfernen ).


Eine andere Möglichkeit, die gewünschte Reihenfolge zu erhalten, besteht darin, die -vOption (Versionssortierung) zu verwenden, wie unter Gruppieren versteckter Dateien und Verzeichnisse mit ls vorgeschlagen - obwohl dies nicht wirklich beabsichtigt ist:

  -v     natural sort of (version) numbers within text

Da lsIhre .bashrcDatei mit ziemlicher Sicherheit bereits einen Alias enthält, können Sie die Alias ​​(e) dort einfach so ändern, dass sie den Alias ​​enthalten -v.


Keine meiner LC_-Variablen ist gesetzt. Ich bin überrascht, dass die Standardeinstellung etwas Kompliziertes und etwas Einfaches bewirkt. LC_ALL = C jetzt in meinen Startdateien.
David Ledger

1
@ DavidLedger, um Ihre Gebietsschemaeinstellungen anzuzeigen, geben Sie ein locale(sie werden nicht explizit als Umgebungsvariablen
angezeigt, es

Ja, das wurde auf en_US.UTF-8 gesetzt. Ich bin seit '83 eine Shell-Person, daher macht das Gebietsschema im Allgemeinen überhaupt keinen Unterschied. Vielen Dank.
David Ledger

Versuchen Sie, export LC_ALL=Czu Ihrem hinzuzufügen .profile.
jrw32982 unterstützt Monica
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.