Ich möchte alle Dateien in der Größenordnung von groß bis klein auflisten und die Dateien können sich an einer beliebigen Stelle in einem bestimmten Ordner befinden.
man ls
:-S sort by file size
Ich möchte alle Dateien in der Größenordnung von groß bis klein auflisten und die Dateien können sich an einer beliebigen Stelle in einem bestimmten Ordner befinden.
man ls
:-S sort by file size
Antworten:
Verwenden Sie einfach etwas wie:
ls -lS /path/to/folder/
Hauptstadt S .
Dadurch werden die Dateien nach Größe sortiert.
Siehe auch:
-S sort by file size
Wenn Sie in umgekehrter Reihenfolge sortieren möchten , fügen Sie einfach den -r
Schalter hinzu.
Aktualisieren:
So schließen Sie Verzeichnisse aus (und sofern keiner der Dateinamen oder Symlink-Ziele Zeilenumbrüche enthält):
ls -lS | grep -v '^d'
Update 2:
Ich sehe jetzt, wie es immer noch symbolische Links zeigt, die Ordner sein könnten. Symbolische Links beginnen immer mit einem Buchstaben l, wie im Link.
Ändern Sie den Befehl, um nach a zu filtern -
. Dies sollte nur reguläre Dateien hinterlassen:
ls -lS | grep '^-'
Auf meinem System werden nur normale Dateien angezeigt.
Update 3:
Um eine Rekursion hinzuzufügen, würde ich die Sortierung der Zeilen dem sort
Befehl überlassen und ihn anweisen, die fünfte Spalte zum Sortieren zu verwenden.
ls -lR | grep '^-' | sort -k 5 -rn
-rn
bedeutet "Rückwärts" und "Numerisch", um die größten Dateien oben zu erhalten. Nachteil dieses Befehls ist, dass nicht der vollständige Pfad der Dateien angezeigt wird.
Wenn Sie den vollständigen Pfad der Dateien benötigen, verwenden Sie Folgendes:
find . -type f -exec du -h {} + | sort -r -h
Der find
Befehl findet rekursiv alle Dateien in allen Unterverzeichnissen von .
und call du -h
(dh Datenträgerverwendung -humanreadable ) und sortiert dann die Ausgabe erneut. Wenn Ihr find
/ sort
nicht unterstützt -h
, ersetzen Sie mit du -k
und sort -rn
. Beachten Sie, dass Größe und Datenträgerverwendung nicht dasselbe sind.
du
Gibt die Datenträgernutzung an, die von der Dateigröße abweicht. Mit (GNU) du -h
funktioniert die numerische Sortierung nicht ( -h
zum Sortieren benötigen Sie die GNU-Option). xargs erwartet eine Liste von möglicherweise in Anführungszeichen gesetzten Wörtern als Eingabe, sodass es nicht funktioniert, wenn Dateinamen Leerzeichen oder in Anführungszeichen gesetzte Zeichen enthalten.
find . -type f -print0 | xargs -0 du -h | sort -rh
. Wenn Sie nur die größten 30 Dateien sagen: find . -type f -print0 | xargs -0 du -h | sort -rh | head -n 30
.
+ |
Syntax erklären + | sort -r -h
?
Sie könnten so etwas wie Suchen und Sortieren verwenden.
find . -type f -ls | sort -r -n -k7
(Die -ls
Option ist nicht Standard, wird aber in vielen Suchimplementierungen verwendet, nicht nur in der GNU-Implementierung. In der GNU-Suche und anderen wird ls -li
mit wenigen Ausnahmen etwas Ähnliches angezeigt , z. B., wenn Dateien mit ACLs nicht mit einem + gekennzeichnet sind.)
Wenn die Dateinamen Zeilenumbrüche enthalten dürfen, mit GNU find und GNU sort:
find . -type f -ls -printf '\0' | sort -zk7rn | tr -d '\0'
Mit zsh und GNU ls:
ls -ldU -- **/*(.OL)
Wo (.OL)
ist ein Glob-Qualifizierer , .
um nur reguläre Dateien auszuwählen , OL
um die Reihenfolge nach Länge umzukehren (Dateigröße, o
aufsteigende Reihenfolge, O
absteigende Reihenfolge ).
(Beachten Sie, dass ältere Versionen von zsh Probleme mit Dateigrößen über 2 ^ 32 hatten).
Bei einigen Betriebssystemen ist die Größe der an einen Befehl übergebenen Argumentliste begrenzt. In diesen Fällen benötigen Sie:
autoload -U zargs
zargs ./**/*(.OL) -- ls -ldU
Wenn Sie nur die Liste der Dateien und nicht die detaillierte Ausgabe möchten, tun Sie einfach Folgendes:
print -rl -- **/*(.OL)
Wenn Sie ausgeblendete Dateien einschließen möchten (deren Name mit einem Punkt außer .
und beginnt ..
) und auch in ausgeblendeten Verzeichnissen suchen möchten , fügen Sie das D
Globbing-Qualifikationsmerkmal hinzu:
print -rl -- **/*(.DOL)
.OL
tun? Gehört das zum Befehl?
ls (GNU coreutils) 8.25
und zsh 5.1.1 (x86_64-ubuntu-linux-gnu)
. Funktioniert es nur für bestimmte Versionen von ls
und zsh
?
Liste Dateien nach Größe aufsteigend wäre:
ls -lSr
Die Optionen sind:
Wenn Sie sagen, dass die Dateien an einer beliebigen Stelle in einem bestimmten Ordner vorhanden sein könnten, müssen Sie alle Verzeichnisse (Ordner) im Startverzeichnis (Ordner) rekursiv herabstufen. Dies ist, was find
zu tun ist:
find . -type f -exec ls -lSd {} +
Dies "findet" alle Dateien im aktuellen Arbeitsverzeichnis ( .
). Für jede gefundene Datei wird ein ls
Prozess ausgeführt, um die gefundenen Objekte in der Größenreihenfolge zu sortieren. Das +
Abschlusszeichen an -exec
bewirkt, dass mehrere Argumente als Liste an übergeben werden ls
. Sofern Ihr Verzeichnis (Ordner) nicht sehr viele Dateien enthält, sollten Sie eine Liste (und damit einen Prozess) haben, die zum gewünschten Ergebnis führt.
Dateilistenanzeige in umgekehrter Reihenfolge: ls -lSrh
In aufsteigender Reihenfolge: ls -lSh
Ich habe vor einiger Zeit etwas in diesem Umfang geschrieben. Sie können ein Argument übergeben, um anzugeben, wie viele Dateien aufgelistet werden sollen, oder einfach eingeben big
, in welchem Fall Sie 10 erhalten.
big () {
NUM_FILES=10;
if [ $1 ]; then
NUM_FILES=$1;
fi;
du | sort -nr | head -n $NUM_FILES
}
Probieren Sie diese aus, es funktioniert gut für mich.
$ find /home/san -type f -printf '%s %p\n'| sort -nr | head -n 10
# find /root -type f -exec ls -lS {} + | head -n 10 | awk '{ print $5, $9 }'
Keine perfekte Antwort, funktioniert aber bis zu einem gewissen Grad
$ ls -lS |grep '^-' | head -n 6
sed
, um die Ausgabe zu schneiden
Zur Antwort von delh und zum Kommentar von Stéphane Chazelas hinzufügen ...
find -print0
kombiniert mit xargs -0
fügt Unterstützung für Leerzeichen / Leerzeichen / Dingsbums hinzu.
du -h | sort -rn
Sortiert nicht richtig zwischen verschiedenen Byte-Vielfachen, z. B. wird 1,1 MB nach 128 KB angezeigt, was falsch ist.
sort -rh
(--human-numeric-sort) kümmert sich darum, aber es funktioniert nur mit der GNU-Version.
Die folgenden Befehle liefern die gewünschte Ausgabe.
Für Menschen lesbar, unter GNU / Linux:
find . -type f -print0 | xargs -0 du -h | sort -rh
In Kilobyte-Einheiten unter BSD / OSX / Andere:
find . -type f -print0 | xargs -0 du -k | sort -rn
Informationen zu BSD / OSX finden Sie auch unter https://unix.stackexchange.com/a/188375/82895 .
Als Variation der ursprünglichen Frage, wenn Sie die kumulative Größe von Dateien in den Unterverzeichnissen sehen möchten:
#!/bin/bash
find ${1:-.} -maxdepth 1 -type d -exec du -sm {} \; | sort -nr
Die Größen werden in Megabyte ( m
In du -sm
) angezeigt . Andere von akzeptierte Werte du
gelten -k
für Kilobyte und -g
für Gigabyte. Die Verwendung -h
für eine für Menschen lesbare Anzeige ist nicht möglich, da dadurch die Sortierung unterbrochen wird.
Hier ist eine Version, die sed
zum Anhängen des M
for-Megabyte verwendet wird:
find ${1:-.} -maxdepth 1 -type d -exec du -sm {} \; | sort -nr | sed -E 's/^([0-9]+)/\1M/g'
Das anzuzeigende Verzeichnis wird festgelegt, über ${1:-.}
das das erste Befehlszeilenargument verwendet wird, wenn es angegeben wird, oder das aktuelle Verzeichnis, wenn es ohne Argumente aufgerufen wird.
HINWEIS: Dies kann bei vielen Dateien sehr lange dauern. Die Option -type d
listet nur Unterverzeichnisse auf und schließt Dateien im aktuellen Ordner aus. Wenn Sie auch die Dateien im aktuellen Ordner sehen möchten, entfernen Sie sie.
Hinweis: Möglicherweise möchten Sie
ncdu
stattdessen verwenden, was in den meisten Linux-Repos (unter Ubuntu / Debianapt install ncdu
) sowie unter OSX (brew install ncdu
) verfügbar ist .