it-swarm.com.de

So listen Sie alle nach Größe geordneten Dateien auf

Ich möchte alle Dateien in der Reihenfolge von groß bis klein auflisten und die Dateien könnten überall in einem bestimmten Ordner vorhanden sein.

268
Joe

Verwenden Sie einfach etwas wie:

ls -lS /path/to/folder/

Kapital [~ # ~] s [~ # ~] .

Dadurch werden die Dateien nach Größe sortiert.

Siehe auch:

man ls

-S     sort by file size

Wenn Sie in umgekehrter Reihenfolge sortieren möchten , fügen Sie einfach den Schalter -r Hinzu.

Update:

So schließen Sie Verzeichnisse aus (und vorausgesetzt, keiner der Dateinamen oder Symlink-Ziele enthält Zeilenumbrüche):

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 wie im Link immer mit einem Buchstaben l.

Ändern Sie den Befehl zum Filtern nach -. Dies sollte nur reguläre Dateien hinterlassen:

ls -lS | grep '^-'

Auf meinem System werden nur reguläre Dateien angezeigt.

Update 3:

Um eine Rekursion hinzuzufügen, überlasse ich die Sortierung der Zeilen dem Befehl sort und fordere ihn auf, die 5. Spalte zum Sortieren zu verwenden.

ls -lR | grep '^-' | sort -k 5 -rn

-rn Bedeutet Umkehren und numerisch, um die größten Dateien oben zu erhalten. Der 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 Befehl find findet rekursiv alle Dateien in allen Unterverzeichnissen von . Und ruft du -h Auf (dh Datenträgernutzung -humanreadable) und dann Sortieren Sie die Ausgabe erneut. Wenn Ihr find/sort-h Nicht unterstützt, ersetzen Sie es durch du -k Und sort -rn. Beachten Sie, dass Größe und Festplattennutzung nicht dasselbe sind.

308
delh

Sie könnten so etwas wie Suchen und Sortieren verwenden.

find . -type f -ls | sort -r -n -k7

(Die Option -ls ist nicht Standard, wird jedoch in vielen Suchimplementierungen gefunden, nicht nur in der Option GNU one. In GNU find und anderen). Mit wenigen Ausnahmen wird etwas Ähnliches wie ls -li angezeigt. Beispielsweise sind Dateien mit ACLs nicht mit einem + gekennzeichnet.)

Wenn die Dateinamen Zeilenumbrüche enthalten können, mit GNU find und GNU sort:

find . -type f -ls -printf '\0' | sort -zk7rn | tr -d '\0'
26
Mark Cohen

Mit zsh und GNU ls:

ls -ldU -- **/*(.OL)

Wo (.OL) ist ein glob qualifier , . um nur reguläre Dateien auszuwählen, OL um die Reihenfolge nach Länge umzukehren (Dateigröße, o für aufsteigende Reihenfolge , O für absteigend).

(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, gehen Sie einfach wie folgt vor:

print -rl -- **/*(.OL)

Wenn Sie versteckte Dateien einschließen möchten (deren Name mit einem Punkt beginnt, außer . und ..) und suchen Sie auch in versteckten Verzeichnissen. Fügen Sie das Globbing-Qualifikationsmerkmal D hinzu:

print -rl -- **/*(.DOL)
10

Liste Dateien nach Größe aufsteigend wäre:

ls -lSr

Die Optionen sind:

  • l: lang, zeigt detaillierte Benutzer, Gruppen, andere Attribute, Datum usw. an.
  • S: Bestellungen nach Größe auflisten (standardmäßig absteigend)
  • r: kehrt die Reihenfolge der Auflistung um
9
Baker

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 herabsteigen. Dies ist, was find tun soll:

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 + Terminator zum -exec bewirkt, dass mehrere Argumente als Liste an ls übergeben werden. Sofern Ihr Verzeichnis (Ordner) nicht eine sehr große Anzahl von Dateien enthält, sollten Sie eine Liste (und damit einen Prozess) haben, die zu dem gewünschten Ergebnis führt.

7
JRFerguson

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 
4
Sand1512

Dateilistenanzeige in umgekehrter Reihenfolge: ls -lSrh

Bei aufsteigender Reihenfolge: ls -lSh

4
user174839

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 big eingeben. In diesem Fall erhalten Sie 10.

big () { 
    NUM_FILES=10;
    if [ $1 ]; then
        NUM_FILES=$1;
    fi;
    du | sort -nr | head -n $NUM_FILES
}
2
Emanuel Berg

Hinzufügen zu Delhs Antwort und Stéphane Chazelas 'Kommentar ...

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. 1.1M wird nach 128K angezeigt, was falsch ist.

sort -rh (--human-numeric-sort) kümmert sich darum, funktioniert aber nur in der GNU-Version.

Die folgenden Befehle liefern die gewünschte Ausgabe.

Vom Menschen lesbar, auf GNUs Sortierung/Linux:

find . -type f -print0 | xargs -0 du -h | sort -rh

In Kilobyte-Einheiten unter BSD/OSX/anderen:

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 .

1
djule5

Als Variation der ursprünglichen Frage, wenn Sie die kumulative Größe von Dateien in den Unterverzeichnissen anzeigen möchten:

#!/bin/bash
find ${1:-.} -maxdepth 1 -type d -exec du -sm {} \; | sort -nr

Die Größen werden in Megabyte angezeigt (m in du -sm). Andere von du akzeptierte Werte sind -k Für Kilobyte, -g Für Gigabyte. Die Verwendung von -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 verwendet, um M für Megabyte anzuhängen:

find ${1:-.} -maxdepth 1  -type d  -exec du -sm {} \; | sort -nr | sed -E 's/^([0-9]+)/\1M/g'

Das anzuzeigende Verzeichnis wird über ${1:-.} Festgelegt, wobei das erste Befehlszeilenargument verwendet wird, falls angegeben, 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 anzeigen möchten, entfernen Sie sie.

Hinweis: Möglicherweise möchten Sie stattdessen ncdu verwenden, das in den meisten Linux-Repos (unter Ubuntu/Debian apt install ncdu) Sowie unter OSX (brew install ncdu).

1
ccpizza