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)?

David Ledger
quelle
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.

Steeldriver
quelle
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