Alte Unix-Köpfe (aus der Zeit vor der grafischen Benutzeroberfläche) haben ihre Ordnernamen groß geschrieben und einfache Dateinamen ohne Großbuchstaben erstellt, um dieses Ergebnis automatisch zu erhalten.
JRobert
Nützliche Frage! Vielleicht ist es an der Zeit, die akzeptierte Antwort auf eine Antwort zu ändern, die einfacher ist und die Terminalfarben nicht zerstört?
Ippi
Versuchen Siels -lh --group-directories-first
Diogo
Antworten:
28
Der folgende Befehl listet zuerst die Verzeichnisse, dann die normalen Dateien und an dritter Stelle die Verknüpfungen auf.
ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"
Es wäre auch sehr sinnvoll, einen Alias für diesen Befehl zu erstellen , um Tastenanschläge zu speichern.
Bearbeiten:
Wenn Sie zuerst Verzeichnisse und dann alles, was kein zweites Verzeichnis ist, möchten, verwenden Sie Folgendes:
Dieser Befehl listet nicht alles auf, wenn sich zum Beispiel Sockets oder FIFOs im Ordner befinden
Studer
1
Diese bearbeitete Version sollte weiterhin mit anderen Typen funktionieren. Das erste Grep sagt alles, was mit einem 'd' beginnt, und das zweite Grep sagt alles, was nicht mit einem 'd' beginnt. Sicher beginnt alles entweder mit Werbung oder nicht, oder?
Ry4an Brase
1
@ Mark - Warum nicht einfach tun: ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep -v -E "^d|^-|^total"?
FCTW
1
Um den Befehl von @ FCTW zu einem OSX-Alias zu machen, fügen Sie alias la="ls -la | grep \"^d\" && ls -la | grep \"^-\" && ls -la | grep -E \"^d|^-\" -v | grep -v \"^total\""
Folgendes
2
Ich habe eine Arbeits kürzere Schreibweise gefunden: ls -la|grep ^d;ls -la|grep -v ^d(Zitate sind nicht erforderlich , und ersetzt &&mit ;). Eine weitere Option ist eine Variable einzuführen und dann auswerten: a="ls -la|grep ^d";eval $a;eval $a -v. Kann hilfreich sein, um Wiederholungen zu vermeiden, wenn für ls/ viel mehr Optionen angegeben sind grep. Es gibt auch diese ls -la --group-directories-firstOption, aber die kürzeste imo istls -la|sort
Steven Pribilinskiy
204
Ich liebe * nix und liebe es, den Einfallsreichtum zu sehen, der in einigen dieser Antworten steckt ...
Meins ist unter GNU Linux nicht annähernd so ausgefallen:
alias ls='ls --color -h --group-directories-first'
Da ich mit meinen Linux-CLI-Apps besser zurechtkomme, aktualisiere ich Coreutils auch unter OSX:
brew install coreutils
alias ls='/usr/local/bin/gls --color -h --group-directories-first'
Leider funktioniert dies nicht auf dem OSX-Terminal, da die Option - nicht verfügbar ist.
MEM
7
Wieder Liebe: Ist das Sarkasmus? Wenn ja, würde ich zustimmen.
Allyourcode
4
Mit dem Alias ls sollen die Konfigurationselemente definiert werden, die 90% der Zeit verwendet werden sollen. Weniger Tastenanschläge, um die gewünschte Ausgabe zu erzielen. Wenn Sie jemals native ls-Ausgaben haben möchten, können Sie immer / bin / ls.
Jonathanserafini
4
@MEM Wenn Sie OS X verwenden und Spaß an Terminal haben, sollten Sie das tun. brew install bash Dann funktioniert das! :)
Andrew Ashbacher
5
Meiner Meinung nach hätte dies die akzeptierte Antwort sein müssen, da hier eine Befehlszeilenoption zur Erreichung des genauen Ziels aufgeführt ist, anstelle einer verschlungenen Gruppe von Greps usw.
Ja, standardmäßig. Sie können auch standardmäßig coreutils mit verwenden PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH".
Benesch
7
Es gibt bestimmte Dinge, die ich in einer Verzeichnisliste sehen möchte, und bisher erfüllt keine der Antworten hier alle unten aufgeführten Anforderungen. Meine Anforderungen an eine Verzeichnisliste:
Verzeichnisse und Dateien sind alphabetisch sortiert
Verzeichnisse werden zuerst aufgelistet
Symbolische Links (Symlinks) werden wie Dateien sortiert
Bei der Sortierung wird die Groß- und Kleinschreibung nicht berücksichtigt
Beim Sortieren werden alle führenden Nicht-Alpha-Zeichen in einem Dateinamen ignoriert
Die Auflistung enthält die Gesamtzahl der Verzeichnisse (ohne ./und ../), Dateien und Links
Die Auflistung enthält die Gesamtgröße (Festplattennutzung) der Verzeichnisse und Dateien
Die Auflistung muss unter Linux und Windows gleich aussehen (Git Bash-Shell) - dies war am schwierigsten zu korrigieren, da praktische Optionen wie --group-directories-firstin Git Bash für Windows nicht funktionieren
Nach langem Hin und Her habe ich endlich einen Einzeiler (wenn auch eine sehr lange Schlange ;-)) gefunden, mit dem ich zufrieden bin. Ich habe dies einem Alias namens "dir" zugewiesen:
ls -dlF --color *.*| head -n2 && ls -AlF| LC_ALL=C grep "^d"|
LC_ALL=C sort -k 9df&& ls -AlF| LC_ALL=C grep "^[l-]"|
LC_ALL=C sort -k 9df&& echo -e `find -maxdepth 1 -type d ! -name . |
wc -l`Dir\(s\) `du -hs | cut -f 1`\\t\\t`find -maxdepth 1 -type f |
wc -l`File\(s\) `find -maxdepth 1 -type f -print0 | du -ch --files0-from=- |
tail -n 1 | cut -f 1`\\t\\t`find -maxdepth 1 -type l | wc -l`Link\(s\)
Um die Verwaltung zu vereinfachen, habe ich separate Befehle erstellt, um jedes Segment der Verzeichnisliste nach meinen Wünschen auszugeben, und diese dann mithilfe des &&Operators zusammengesetzt.
ls -dlF --color * .* | head -n2- Auszug ./und ../. Wir möchten diese nicht weiterleiten, sortda sie bereits in der richtigen Reihenfolge vorliegen. Wenn Sie sie sortieren, werden sie ../möglicherweise zuerst aufgelistet. Die -dOption ist, die "Gesamt" -Zeile loszuwerden; Ich mag hinzufügen -F, um den abschließenden Schrägstrich für Verzeichnisse zu zeigen (es wird auch Symlinks mit "@" markieren, wenn Sie eine Ebene tun ls -F).
ls -AlF | LC_ALL=C grep "^d" | LC_ALL=C sort -k 9df- Extrahieren Sie die Verzeichnisse und sortieren Sie sie nach Dateiname (9. Spalte), wobei sowohl Nicht-Alpha / Leerzeichen ( dOption) als auch Groß- / Kleinschreibung ( fOption) ignoriert werden . Die ls -AOption schließt ./und ../aus der Auflistung aus, da wir sie bereits im vorherigen Schritt extrahiert haben. Ich neige dazu , alle Präfix grepund sortBefehle mit dem LC_ALL=CGebietsschema zurückgesetzt , so dass (1) die Ausgabe über Unix - Shells konsistent ist, und (2) Sie können manchmal eine schnellere Leistung sehen , da es nicht mehr den Aufwand der schweren UTF-8 - Zeichen muss gesetzt Zurecht kommen.
ls -AlF | LC_ALL=C grep "^[l-]" | LC_ALL=C sort -k 9df - Dies ist ähnlich wie oben, aber diesmal sortieren wir Dateien und Symlinks.
find -maxdepth 1 -type d ! -name . | wc -l- Ermitteln Sie die Anzahl der Verzeichnisse ohne ./und ../.
find -maxdepth 1 -type f | wc -l - Holen Sie sich die Anzahl der Dateien.
find -maxdepth 1 -type l | wc -l - Ermitteln Sie die Anzahl der Symlinks.
du -hs | cut -f 1 - Extrahieren Sie die Gesamtgröße aller Unterverzeichnisse in einem für Menschen lesbaren Format.
find -maxdepth 1 -type f -print0 | du -ch --files0-from=- | tail -n 1 | cut -f 1 - Extrahieren Sie die Gesamtgröße aller Dateien in einem für Menschen lesbaren Format.
Lassen Sie uns unseren neuen dirAlias in Aktion sehen!
Ein kleiner Nachteil ist, dass Sie keine farbigen Listen haben können, da die Farbkontrollzeichen, die die Dateinamen umgeben, die Sortierung zu unzuverlässig machen.
AKTUALISIEREN
Der obige Alias war schmerzhaft langsam, als er aus dem Stammverzeichnis eines tiefen Dateisystems ausgeführt wurde. Daher habe ich auf diesen einfacheren, aber viel leistungsstärkeren Befehl aktualisiert:
ls -AFoqv--color --group-directories-first | tail -n +2&& find -maxdepth 1-type f -printf '%s\n'| awk '{total+=$1} END {print total" bytes"}'
Seit die neue Version von Git Bash für Windows unterstützt wird --group-directories-first, müssen wir nicht mehr darauf zurückgreifen sort. Auch wenn der neue Alias nicht so viele Informationen anzeigt wie der vorherige, sind die Leistungssteigerungen mehr als wert. Als Vorteil erhalten Sie auch Farben!
Gute Antwort! Aber wenn Sie sagen: „Nach langem Hin und Her habe ich mir endlich einen Einzeiler ausgedacht…“ Ja, das ist in der Tat kein „Einzeiler“ im klassischen Sinne. Es kann sinnvoll sein, diese Logik als eigenständiges Shell-Skript zu verwenden und sie einfach auszuführen oder als Alias aufzurufen.
JakeGould
@JakeGould Du bist schnell! Ich habe meine Antwort noch nicht einmal Korrektur gelesen und du hast sie bereits gelesen und einen Kommentar abgeschossen :). Ja, es ist ein Hauptkandidat für eine Funktion, aber ich war zu dieser Zeit zu faul, also warf es einfach in meine .bash_aliases-Datei. Andererseits schreibe ich normalerweise nur dann eine Funktion, wenn ich ohne Parameterübergabe nichts machen kann.
Donnerstag,
@ 10basetom: Kurze Frage: Wie bekommt man die verschiedenen Farben für die Spalten in ls? Ich kann Dateinamen mit ls --color nach Dateityp einfärben, sehe aber keine Möglichkeit, diese hilfreichen Farben für die Spalten zu erhalten. Was ist das geheimnis
Pirx
@ Pirx Ich glaube, die Spalten sind durch die standardmäßige Hervorhebung der Stack Exchange-Syntax eingefärbt :-).
Donnerstag,
Ja, das scheint der Fall zu sein, aber es ist eine großartige Idee, und Lösungen sind in ;-)
Pirx
6
Sie haben verschiedene Möglichkeiten, je nachdem, ob Sie die alphabetische Reihenfolge beibehalten möchten.
Sie könnten einfach versuchen:
ls -al | sort -k1 -r
oder dies, um die alphabetische Reihenfolge für Dateien mit denselben Berechtigungen beizubehalten:
ls -al | sort -k1,1 -k9,9 -r
oder, wie eleven81 sagte (aber diese Version listet alles auf):
ls -la | grep "^ d" && ls -la | grep "^ -" && ls -al | grep -v ^ [d | -]
Dies ist eine schönere Lösung, IMO. Die Verwendung mehrerer Prozesse und Pipes für die Sortierung anstelle von Pipes für die Sortierung scheint rückwärts zu sein. Zumal ls- al|sort -k1 -rfunktioniert. Was fehlte, ist nur die -rFlagge.
Brice
@brice Die Sache , die mich über ‚Art‘ stört ist , dass ./und ../wird die ersten beiden Zeilen nicht sein, in dieser Reihenfolge. Ansonsten stimme ich zu, dass es die effizientere Lösung ist.
Donnerstag,
Wie färbe ich die Ausgabe?
Danijel
5
Zur Antwort von delerious010 würde ich Folgendes hinzufügen, wenn Sie eine Bestellung im alten Stil wünschen:
LANG=C ls -la --group-directories-first
(oder verwenden Sie LC_ALL oder LANGUAGE oder LC_COLLATE auf "C").
Dies ergibt etwas Ähnliches wie:
...
DIR
Dir
dir
.hidden
123
UC_FILE
Uc_file
lc_file
Obwohl, wenn ich mich richtig erinnere, die versteckten Punktdateien ursprünglich vor den Verzeichnissen erschienen sind.
Hier ist eine Funktion, um dies zu tun (bash oder zsh).
funktion lss
{
# Zeigt die Verzeichnisliste mit den Verzeichnissen oben an.
Befehl ls --color = immer $ @ | egrep '^ d | total'
Befehl ls --color = immer $ @ | egrep -v '^ d | total';
}
Nur zu Ihrer Information, das scheint nicht zu funktionieren. Sie müssen das lange Auflistungsformat ( ls -l) verwenden, um nach einem solchen Dateityp zu filtern. Dieser Befehl bricht auch bei Leerzeichen (in Bash) ab. Sie müssen wie folgt zitieren: "$@"Wenn Sie diesen Ansatz verwenden möchten, können Sie Folgendes tun:function lss {local temp="$(command ls -l --color=always "$@")"; egrep --color=never '^d|total' <<<"$temp"; egrep --color=never -v '^d|total' <<<"$temp"}
Six
2
ls -laX zeigt Ihnen zuerst die Verzeichnisse in alphabetischer Reihenfolge an, schraubt aber die Dateiliste.
Lange Optionen:
ls
-l # List--all
-X # Sort alphabetically by entry extension
Was machen diese? Wo hast du gelernt, sie zu tippen?
Tamara Wijsman
Nun, mein bevorzugtes Betriebssystem ist Debian Linux. Die GNU-Kern-Utils-Paketversion von ls von Debian unterstützt die Option --show-directorys-first. Als ich mit OSX anfing, griff ich einfach nach all meinen Bash-Dot-Dateien und legte sie in meinem Home-Verzeichnis ab Ich hatte eine Menge bash_aliases, die so kaputt gingen ... Dann musste ich einige Workarounds für meine Aliase finden ...
Eddie B
Das erste ist ein bisschen überflüssig ... Es gibt wirklich keinen Grund, die Verzeichnisse zu sortieren, da es die Reihenfolge ist, in der wir keine Verzeichnisse ändern müssen ... das 'ls -la | sort -r 'funktioniert wirklich. Grundsätzlich heißt es ... 1) A) Finden. -d 1 -type d (Beginnen Sie mit diesem Verzeichnis, durchsuchen Sie eine Verzeichnis-Tiefe und suchen Sie nur nach Verzeichnissen) B) ls -la (liste alle Attribute auf) C) Sortieren Sie sie in umgekehrter Reihenfolge 2) Tun Sie als 1) lassen Sie einfach den Fund fallen. ..es wird nicht benötigt ... Ich mag Studers Lösung eigentlich besser ... :-)
Eddie B
1
TL; DR
alias ls='ls -lhF --color'
list_sorted(){
ls $*| grep "^d";
ls $*| grep "^-";
ls $*| grep -v -E "^d|^-|^total"}
alias ll=list_sorted
Erläuterung
Ich verwende eine Kombination der Lösungen, die in den Antworten und Kommentaren hier angegeben sind.
Standard ls
Zunächst überschreibe ich das Standardverhalten für ls:
-l: Die Liste immer als eindimensionale vertikale Liste anzeigen
-h: Anzeigen von Dateigrößen in lesbarer Form (z. B. 4,0 KB anstelle von 4096 KB)
-F: Zeigen Sie Indikatoren wie einen abschließenden Schrägstrich für Verzeichnisse an
alias ls='ls -lhF --color'
Verlängert ll
Als nächstes schreibe ich eine Funktion, die die Sortierlogik enthält. Für jeden lsgebe ich irgendwelche ursprünglich übergebenen Argumente an ihn weiter. Dadurch kann ich den Alias aus einem anderen Arbeitsverzeichnis als dem, das ich auflisten möchte, verwenden ls -a ~.
Außerdem wird jeder Aufruf lsan einen grepBefehl weitergeleitet. Hier erfolgt die Sortierung. ls -l | grep "^d"Zum Beispiel werden nur Verzeichnisse aufgelistet. Wenn Verzeichnisse zuerst aufgelistet werden sollen, muss dies auch in der Funktion an erster Stelle stehen. Das nächste ist Dateien.
Zuletzt zeige ich alles, was weder ein Verzeichnis noch eine Datei ist (noch die Zeile, die die Gesamtgröße des Verzeichnisinhalts anzeigt). Dies geschieht durch Greifen von directoy, regulären Dateieinträgen und dem Gesamteintrag und anschließendes Invertieren des Ergebnisses über das -vArgument.
list_sorted(){# List directories
ls $*| grep "^d";# List regular files
ls $*| grep "^-";# List everything else (e.g. symbolic links)
ls $*| grep -v -E "^d|^-|^total"}
Schließlich habe ich die Funktion einem neuen Befehl zugeordnet. Insbesondere möchte ich nicht überschreiben, lsfalls meine Funktion in einigen Szenarien unterbrochen wird. Dann möchte ich nutzen können ls. Alternativ können Sie den lsBefehl ohne Alias immer durch Aufrufen aufrufen \ls.
alias ll=list_sorted
Anmerkungen
Ich benutze ;statt &&als Begrenzer für die Befehle. Andernfalls kann man den Inhalt von Verzeichnissen, die keine Verzeichnisse enthalten, nicht auflisten (der erste ls-Befehl wird mit false ausgewertet, sodass der nächste Befehl nicht ausgeführt werden kann, da er mit gekoppelt ist &&. ;Dies wird vermieden.)
Dies ist eine Skriptlösung. Listet nur die Namen auf, keine Inode-Daten, alphabetisch, ohne Berücksichtigung der Groß- und Kleinschreibung, in Spalten formatiert. Obwohl es sich wie die Standardausgabe von ls um Zeilenmajor anstelle von Spaltenmajor handelt. Die Spalten werden etwas unordentlich, wenn ein Dateiname mit> 26 Zeichen vorhanden ist.
rm -f /tmp/lsout
ls -1p| grep /| sort -f >>/tmp/lsout
ls -1p| grep -v /| sort -f >>/tmp/lsout
IFS=$'\n' read -d ''-r -a lines </tmp/lsout
printf "%-24s %-24s %-24s\n""${lines[@]}"
Und eine andere, mit etwas zusätzlicher Formatierung.
-
kommt vord
bei der Verwendungsort
ls -lh --group-directories-first
Antworten:
Der folgende Befehl listet zuerst die Verzeichnisse, dann die normalen Dateien und an dritter Stelle die Verknüpfungen auf.
ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"
Es wäre auch sehr sinnvoll, einen Alias für diesen Befehl zu erstellen , um Tastenanschläge zu speichern.
Bearbeiten:
Wenn Sie zuerst Verzeichnisse und dann alles, was kein zweites Verzeichnis ist, möchten, verwenden Sie Folgendes:
ls -la | grep "^d" && ls -la | grep -v "^d"
quelle
ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep -v -E "^d|^-|^total"
?alias la="ls -la | grep \"^d\" && ls -la | grep \"^-\" && ls -la | grep -E \"^d|^-\" -v | grep -v \"^total\""
ls -la|grep ^d;ls -la|grep -v ^d
(Zitate sind nicht erforderlich , und ersetzt&&
mit;
). Eine weitere Option ist eine Variable einzuführen und dann auswerten:a="ls -la|grep ^d";eval $a;eval $a -v
. Kann hilfreich sein, um Wiederholungen zu vermeiden, wenn fürls
/ viel mehr Optionen angegeben sindgrep
. Es gibt auch diesels -la --group-directories-first
Option, aber die kürzeste imo istls -la|sort
Ich liebe * nix und liebe es, den Einfallsreichtum zu sehen, der in einigen dieser Antworten steckt ...
Meins ist unter GNU Linux nicht annähernd so ausgefallen:
Da ich mit meinen Linux-CLI-Apps besser zurechtkomme, aktualisiere ich Coreutils auch unter OSX:
quelle
brew install bash
Dann funktioniert das! :)Für Mac-Benutzer coreutils :
Angenommen, Ihr System ist bereit für das Homebrew :
quelle
gls
lieber. Richtig?PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
.Es gibt bestimmte Dinge, die ich in einer Verzeichnisliste sehen möchte, und bisher erfüllt keine der Antworten hier alle unten aufgeführten Anforderungen. Meine Anforderungen an eine Verzeichnisliste:
./
und../
), Dateien und Links--group-directories-first
in Git Bash für Windows nicht funktionierenNach langem Hin und Her habe ich endlich einen Einzeiler (wenn auch eine sehr lange Schlange ;-)) gefunden, mit dem ich zufrieden bin. Ich habe dies einem Alias namens "dir" zugewiesen:
Um die Verwaltung zu vereinfachen, habe ich separate Befehle erstellt, um jedes Segment der Verzeichnisliste nach meinen Wünschen auszugeben, und diese dann mithilfe des
&&
Operators zusammengesetzt.ls -dlF --color * .* | head -n2
- Auszug./
und../
. Wir möchten diese nicht weiterleiten,sort
da sie bereits in der richtigen Reihenfolge vorliegen. Wenn Sie sie sortieren, werden sie../
möglicherweise zuerst aufgelistet. Die-d
Option ist, die "Gesamt" -Zeile loszuwerden; Ich mag hinzufügen-F
, um den abschließenden Schrägstrich für Verzeichnisse zu zeigen (es wird auch Symlinks mit "@" markieren, wenn Sie eine Ebene tunls -F
).ls -AlF | LC_ALL=C grep "^d" | LC_ALL=C sort -k 9df
- Extrahieren Sie die Verzeichnisse und sortieren Sie sie nach Dateiname (9. Spalte), wobei sowohl Nicht-Alpha / Leerzeichen (d
Option) als auch Groß- / Kleinschreibung (f
Option) ignoriert werden . Diels -A
Option schließt./
und../
aus der Auflistung aus, da wir sie bereits im vorherigen Schritt extrahiert haben. Ich neige dazu , alle Präfixgrep
undsort
Befehle mit demLC_ALL=C
Gebietsschema zurückgesetzt , so dass (1) die Ausgabe über Unix - Shells konsistent ist, und (2) Sie können manchmal eine schnellere Leistung sehen , da es nicht mehr den Aufwand der schweren UTF-8 - Zeichen muss gesetzt Zurecht kommen.ls -AlF | LC_ALL=C grep "^[l-]" | LC_ALL=C sort -k 9df
- Dies ist ähnlich wie oben, aber diesmal sortieren wir Dateien und Symlinks.find -maxdepth 1 -type d ! -name . | wc -l
- Ermitteln Sie die Anzahl der Verzeichnisse ohne./
und../
.find -maxdepth 1 -type f | wc -l
- Holen Sie sich die Anzahl der Dateien.find -maxdepth 1 -type l | wc -l
- Ermitteln Sie die Anzahl der Symlinks.du -hs | cut -f 1
- Extrahieren Sie die Gesamtgröße aller Unterverzeichnisse in einem für Menschen lesbaren Format.find -maxdepth 1 -type f -print0 | du -ch --files0-from=- | tail -n 1 | cut -f 1
- Extrahieren Sie die Gesamtgröße aller Dateien in einem für Menschen lesbaren Format.Lassen Sie uns unseren neuen
dir
Alias in Aktion sehen!VOR:
NACH:
Ein kleiner Nachteil ist, dass Sie keine farbigen Listen haben können, da die Farbkontrollzeichen, die die Dateinamen umgeben, die Sortierung zu unzuverlässig machen.
AKTUALISIEREN
Der obige Alias war schmerzhaft langsam, als er aus dem Stammverzeichnis eines tiefen Dateisystems ausgeführt wurde. Daher habe ich auf diesen einfacheren, aber viel leistungsstärkeren Befehl aktualisiert:
Beispielausgabe:
Seit die neue Version von Git Bash für Windows unterstützt wird
--group-directories-first
, müssen wir nicht mehr darauf zurückgreifensort
. Auch wenn der neue Alias nicht so viele Informationen anzeigt wie der vorherige, sind die Leistungssteigerungen mehr als wert. Als Vorteil erhalten Sie auch Farben!quelle
Sie haben verschiedene Möglichkeiten, je nachdem, ob Sie die alphabetische Reihenfolge beibehalten möchten.
Sie könnten einfach versuchen:
oder dies, um die alphabetische Reihenfolge für Dateien mit denselben Berechtigungen beizubehalten:
oder, wie eleven81 sagte (aber diese Version listet alles auf):
quelle
ls- al|sort -k1 -r
funktioniert. Was fehlte, ist nur die-r
Flagge../
und../
wird die ersten beiden Zeilen nicht sein, in dieser Reihenfolge. Ansonsten stimme ich zu, dass es die effizientere Lösung ist.Zur Antwort von delerious010 würde ich Folgendes hinzufügen, wenn Sie eine Bestellung im alten Stil wünschen:
(oder verwenden Sie LC_ALL oder LANGUAGE oder LC_COLLATE auf "C").
Dies ergibt etwas Ähnliches wie:
Obwohl, wenn ich mich richtig erinnere, die versteckten Punktdateien ursprünglich vor den Verzeichnissen erschienen sind.
quelle
Hier ist eine Funktion, um dies zu tun (bash oder zsh).
quelle
ls -l
) verwenden, um nach einem solchen Dateityp zu filtern. Dieser Befehl bricht auch bei Leerzeichen (in Bash) ab. Sie müssen wie folgt zitieren:"$@"
Wenn Sie diesen Ansatz verwenden möchten, können Sie Folgendes tun:function lss {local temp="$(command ls -l --color=always "$@")"; egrep --color=never '^d|total' <<<"$temp"; egrep --color=never -v '^d|total' <<<"$temp"}
ls -laX
zeigt Ihnen zuerst die Verzeichnisse in alphabetischer Reihenfolge an, schraubt aber die Dateiliste.Lange Optionen:
quelle
Ein anderer Weg ...
ODER
ODER
quelle
TL; DR
Erläuterung
Ich verwende eine Kombination der Lösungen, die in den Antworten und Kommentaren hier angegeben sind.
Standard
ls
Zunächst überschreibe ich das Standardverhalten für
ls
:-l
: Die Liste immer als eindimensionale vertikale Liste anzeigen-h
: Anzeigen von Dateigrößen in lesbarer Form (z. B. 4,0 KB anstelle von 4096 KB)-F
: Zeigen Sie Indikatoren wie einen abschließenden Schrägstrich für Verzeichnisse anVerlängert
ll
Als nächstes schreibe ich eine Funktion, die die Sortierlogik enthält. Für jeden
ls
gebe ich irgendwelche ursprünglich übergebenen Argumente an ihn weiter. Dadurch kann ich den Alias aus einem anderen Arbeitsverzeichnis als dem, das ich auflisten möchte, verwendenls -a ~
.Außerdem wird jeder Aufruf
ls
an einengrep
Befehl weitergeleitet. Hier erfolgt die Sortierung.ls -l | grep "^d"
Zum Beispiel werden nur Verzeichnisse aufgelistet. Wenn Verzeichnisse zuerst aufgelistet werden sollen, muss dies auch in der Funktion an erster Stelle stehen. Das nächste ist Dateien.Zuletzt zeige ich alles, was weder ein Verzeichnis noch eine Datei ist (noch die Zeile, die die Gesamtgröße des Verzeichnisinhalts anzeigt). Dies geschieht durch Greifen von directoy, regulären Dateieinträgen und dem Gesamteintrag und anschließendes Invertieren des Ergebnisses über das
-v
Argument.Schließlich habe ich die Funktion einem neuen Befehl zugeordnet. Insbesondere möchte ich nicht überschreiben,
ls
falls meine Funktion in einigen Szenarien unterbrochen wird. Dann möchte ich nutzen könnenls
. Alternativ können Sie denls
Befehl ohne Alias immer durch Aufrufen aufrufen\ls
.Anmerkungen
;
statt&&
als Begrenzer für die Befehle. Andernfalls kann man den Inhalt von Verzeichnissen, die keine Verzeichnisse enthalten, nicht auflisten (der erste ls-Befehl wird mit false ausgewertet, sodass der nächste Befehl nicht ausgeführt werden kann, da er mit gekoppelt ist&&
.;
Dies wird vermieden.)quelle
Dies ist eine Skriptlösung. Listet nur die Namen auf, keine Inode-Daten, alphabetisch, ohne Berücksichtigung der Groß- und Kleinschreibung, in Spalten formatiert. Obwohl es sich wie die Standardausgabe von ls um Zeilenmajor anstelle von Spaltenmajor handelt. Die Spalten werden etwas unordentlich, wenn ein Dateiname mit> 26 Zeichen vorhanden ist.
Und eine andere, mit etwas zusätzlicher Formatierung.
Die Ausgabe für den letzten sieht wie folgt aus, abzüglich der Farben:
Denken Sie nur daran, kein Alias zu verwenden oder das Standardverhalten von ls zu ändern, da dieses Skript es aufruft.
quelle