Unix 'ls' sortiert nach Namen


127

Können Sie eine ls- Liste nach Namen sortieren ?


10
Wenn nicht ohne Argumente nach Namen sortiert wird, möchten Sie möglicherweise überprüfen, ob ls auf etwas anderes ausgerichtet ist, oder es einfach über den vollständigen Pfad aufrufen, um vorhandene Aliase zu entfernen.
Tvanfosson

gnu-coreutils wird standardmäßig sortiert. Welches System verwenden Sie (wie andere gefragt haben)
Nick Fortescue

Sind Sie sicher, dass Sie nach Name und nicht nach Typ sortieren möchten (dh zuerst Verzeichnis, dann Dateien)?
Curtisk

Großbuchstaben stehen vor Kleinbuchstaben, daher steht Datei Z vor Datei a ... wie kann ich das beheben?
ArtOfWarfare

Auf der Manpage steht "separat und in lexikografischer Reihenfolge sortiert". Dateien werden nach dem ersten Zeichen sortiert: numerische [0..9] und OBERE Zeichen [A..Z] und niedrige Zeichen [a..z]
Gürol Canbek

Antworten:


131

Mein ls sortiert standardmäßig nach Namen. Was siehst du?

man ls Zustände:

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


lssortiert nicht, wenn -c1angegeben: Gibt es eine Möglichkeit, dies zu erreichen? ( --sort=namescheint nicht zu funktionieren)
dhc

1
Das ist nicht wahr. mit ls -la, ich sehe : .bashrc - can - .config - Downloads - .local - tmp, sort be name wäre:.bashrc - .config - .local - Downloads - can - tmp
12431234123412341234123

1
meins sagt 100.jpg kommt vor 10.jpg. Sinnvoll, denke ich, wenn "0" vor "steht." aber es ist immer noch nicht intuitiv
chiliNUT

Ich sehe "M" vor "b". Verwirrt. Warten Sie, spielt die Großschreibung eine Rolle?
Daniel Springer

105

Für etwas Einfaches können Sie ls mit sort kombinieren . Für nur eine Liste von Dateinamen:
ls -1 | Sortieren

So sortieren Sie sie in umgekehrter Reihenfolge:
ls -1 | sort -r


3
Gibt es eine Möglichkeit, Dateien wie ls | sort -n folgt zu sortieren: 1.1.1; 1.1.2; 1.1.3; 2.10.1; 2.10.15; 2.10.2; 2.10.20; 2.10.21; 2.1.1; 2.1.10; 2.1.15; 2.1.2; 2.1.3; 2.1.4; 10.1.1; 10.1.2; 10.1.3; 11.0.1; 11.0.2; 11.0.20; 11.0.21; 11.0.22; Wie Sie 2.10.15 vor 2.10.2 sehen können .
BBK

Ich mache eine Android-Entwicklung auf einem Pidion-Gerät und es wird nicht automatisch sortiert, daher war dies sehr hilfreich! Das einzige Problem ist, dass es so aussieht, als würde es Softlinks sortieren, aber aus irgendeinem Grund keine Dateien sortieren
Mitch

Auf dem Mac sieht es so aus, als ob der zweite Befehl auf verkürzt werden kann ls -1r.
Ash Ryan Arnwine

4
@BBK sort -V sortiert nach Versionsnummern, so dass Sie erhalten .. 2.10.2; 2.10.15; .. from man sort .. --sort = WORD sortiert nach WORD: general-numeric -g, human-numeric -h, month -M, numeric -n, random -R, version -V
mosh

35

lsfrom coreutilsführt standardmäßig eine länderspezifische Sortierung durch und kann daher in einigen Fällen zu überraschenden Ergebnissen führen (z. B. %foowird zwischen barund quuxin sortiert LANG=en_US). Wenn Sie eine ASCIIbetical-Sortierung wünschen, verwenden Sie

LANG=C ls

LANGWenn Sie das Sortierverhalten beeinflussen, hilft mir dieser Beitrag sehr!
Yurenchen

Das hat auch bei mir funktioniert. Könnten Sie das näher erläutern? Warum sortiert es anders?
Kostas

1
Diese Dosis funktioniert, aber die Ausgabe ?für jedes Nicht-ASCII-Zeichen, wenn die Ausgabe ein Terminal ist (schlechte Funktion von ls prüft, ob sie an ein Terminal ausgegeben wird, funktioniert beim Piping). Sie können dies mit Piping to Cat "beheben", das C.UTF-8Gebietsschema verwenden (sofern Ihr System dies unterstützt) und / oder das -bFlag verwenden. Noch besser, überhaupt nicht verwenden ls, besser verwenden `
12431234123412341234123

Dies half mir herauszufinden, dass für mich das Problem darin bestand, dass einige meiner Dateinamen einen Bindestrich (-) und einige einen Bindestrich (-) enthielten. lssortiert Bindestriche vor Bindestrichen.
Jamy Mahabier

17

Das Schöne an * nix-Tools ist, dass Sie sie kombinieren können:

ls -l | sort -k9,9

Die Ausgabe von ls -lwird so aussehen

-rw-rw-r-- 1 luckydonald luckydonald  532 Feb 21  2017 Makefile
-rwxrwxrwx 1 luckydonald luckydonald 4096 Nov 17 23:47 file.txt

Wenn 9,9Sie also die Spalte 9bis zur Spalte sortieren 9, sind dies die Dateinamen. Sie müssen angeben, wo Sie anhalten sollen. Dies ist in diesem Fall dieselbe Spalte. Die Spalten beginnen mit 1.

Wenn Sie Groß- / Kleinschreibung ignorieren möchten, fügen Sie --ignore-caseden Befehl sort hinzu.


1
Was heißt -k9,9das
Luckydonald

Herausgefunden bedeutet dies, die Spalte 9nach derselben Spalte zu sortieren 9. Eine normale lsAusgabe sieht folgendermaßen aus: drwx------ 8 999 user 4.0K Feb 5 2017 file.txtSpalte 9 sind also die Dateinamen. Wenn Sie den Fall ignorieren möchten, verwenden Sie --ignore-caseon sort.
Luckydonald

8

HINWEIS: "a" kommt NACH "Z":

$ touch A.txt aa.txt Z.txt

$ ls

A.txt Z.txt aa.txt


3
Das ist nicht immer wahr. Ich kenne die Umstände nicht genau, die dies nicht zutreffen lassen, aber auf meinem Computer mit Ubuntu 12.04 ist die Ausgabe von ls alphabetisch sortiert (Groß- und Kleinschreibung wird ignoriert).
Patrick James McDougle

Guter Fang! Scheint, als würde es basierend auf dem ASCII-Code bestellt. Großbuchstaben werden von Kleinbuchstaben gefolgt.
Kent Pawar

1
Ich habe festgestellt, dass mein MacOS zuerst Zahlen, dann Großbuchstaben, dann Unterstriche und dann Kleinbuchstaben sortiert. Es ist lustig, dass sie nicht zwischen Groß- und Kleinschreibung unterscheiden. Auf der anderen Seite unterscheidet mein Debian zwischen Groß- und Kleinschreibung, aber es sortiert die Buchstaben unempfindlich, es sei denn, es gibt ein Unentschieden, dann gewinnt Kleinbuchstaben! Beispiel: ABA.txt ABb.txt aBC.txt AbC.txt ABc.txt
zk82

Ich bin auch auf einem MAC. Ich war enttäuscht, die Sortierung von A, Z, A, Z zu sehen. Ich bin hier, weil ich lieber A, a, Z, a habe. danke für deinen tipp. werde hier die normallösungen ausprobieren .
Nyxee

8

Dateien, die sich nur durch eine numerische Zeichenfolge unterscheiden, können nach dieser Nummer sortiert werden, sofern ein Trennzeichen vorangestellt ist.

In diesem Fall kann die folgende Syntax verwendet werden:

ls -x1 file | sort -t'<char>' -n -k2

Beispiel:

ls -1 TRA*log | sort -t'_' -n -k2

TRACE_1.log
TRACE_2.log
TRACE_3.log
TRACE_4.log
TRACE_5.log
TRACE_6.log
TRACE_7.log
TRACE_8.log
TRACE_9.log
TRACE_10.log

4

Von der Manpage (für Bash ls):

Sortieren Sie Einträge alphabetisch, wenn weder -cftuSUX noch --sort vorhanden sind.


3
Es gibt keine "Bash ls". Do "which ls"
Norbert Hartl

@Norbert: Du bist richtig, aber es which lswürde gelingen, selbst wenn bash ein eingebautes ls hätte. Tun Sie es lieber builtin lsin Bash und erhalten Sie einen Fehler.
Pianosaurus

4
@Norbert: Gibt whichimmer einen Pfad zurück. Verwenden Sie type lsdiese Option , um zu bestimmen, was die Shell für integriert hält ls(integriert, funktionsfähig, ausführbar).
Ephemient

3

Das lsDienstprogramm sollte IEEE Std 1003.1-2001 ( POSIX.1) entsprechen, in dem Folgendes angegeben ist:

22027: Verzeichnis- und Nichtverzeichnisoperanden werden getrennt nach der Sortierreihenfolge im aktuellen Gebietsschema sortiert.

26027: Standardmäßig ist das Format nicht angegeben, aber die Ausgabe muss alphabetisch nach Symbolnamen sortiert sein :

  • Bibliotheks- oder Objektname, wenn −A angegeben ist
  • Symbolname
  • Symboltyp
  • Wert des Symbols
  • Die dem Symbol zugeordnete Größe, falls zutreffend


2

ls -X funktioniert für diesen Zweck, falls Sie ls auf einen nützlicheren Standard eingestellt haben.


0
In Debian Jessie, this works nice:

ls -lah --group-directories-first

# l=use a long listing format
# a=do not ignore entries starting with .
# h=human readable
# --group-directories-first=(obvious)
# Note: add -r for reverse alpha

# You might consider using lh by appending to ~/.bashrc as the alias:
~$ echo "alias lh='ls -lah --group-directories-first'" >>~/.bashrc
# -- restart your terminal before using lh command --
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.