Ich muss die größten Dateien in einem Ordner finden.
Wie scanne ich einen Ordner rekursiv und sortiere den Inhalt nach Größe?
Ich habe versucht mit ls -R -S
, aber das listet die Verzeichnisse auch.
Ich habe auch versucht mit find
.
command-line
find
ls
user2179293
quelle
quelle
Antworten:
Sie können dies auch mit nur tun
du
. Um auf der sicheren Seite zu sein, benutze ich diese Version vondu
:Die Vorgehensweise:
Aufschlüsselung des Ansatzes
Der Befehl erstellt
du -ah DIR
eine Liste aller Dateien und Verzeichnisse in einem bestimmten VerzeichnisDIR
. Das-h
Ergebnis sind vom Menschen lesbare Größen, die ich bevorzuge. Wenn Sie sie nicht wollen, lassen Sie diesen Schalter fallen. Ich benutze diehead -6
nur, um die Menge der Ausgabe zu begrenzen!Einfach genug, um es vom kleinsten zum größten zu sortieren:
Kehre es um, vom größten zum kleinsten:
Zeige mir nicht das Verzeichnis, nur die Dateien:
Wenn Sie nur die Liste der kleinsten bis größten Dateien, aber der 6 wichtigsten Dateien anzeigen möchten, können Sie den Sortierschalter umkehren, drop (
-r
) undtail -6
anstelle von verwendenhead -6
.quelle
grep -v "/$"
Teil scheint nicht das zu tun, was Sie erwartet haben, da an die Verzeichnisse kein Schrägstrich angehängt ist. Weiß jemand, wie man Verzeichnisse von den Ergebnissen ausschließt?/
s - zum Beispiel/home/saml/Downloads/audible
scheint es sich um ein Verzeichnis zu handeln, es ist jedoch kein Schrägstrich enthalten. Hat/home/saml/Downloads/
nur einen Schrägstrich, aber das liegt wahrscheinlich daran, dass Sie ihn mit einem Schrägstrich geschrieben haben, als Sie das Argument für initial angegeben habendu
.Wenn Sie alle Dateien im aktuellen Verzeichnis und seinen Unterverzeichnissen suchen und sie nach ihrer Größe (ohne Berücksichtigung ihres Pfades) auflisten möchten und annehmen möchten, dass keiner der Dateinamen Zeilenumbruchzeichen enthält
find
, können Sie dies mit GNU tun:Von
man find
einem GNU-System aus:Von
man sort
:quelle
Versuchen Sie den folgenden Befehl:
Die 20 größten Dateien im aktuellen Verzeichnis werden rekursiv aufgelistet.
Hinweis: Die Option
-h
fürsort
ist unter OSX / BSD nicht verfügbar. Sie müssen alsosort
voncoreutils
(z. B. überbrew
) installieren und den lokalen bin-Pfad aufPATH
z. B. anwendenAlternativ verwenden Sie:
Für die größten Verzeichnisse verwenden Sie
du
zB:oder:
quelle
Dies findet alle Dateien rekursiv und sortiert sie nach Größe. Es druckt alle Dateigrößen in KB aus und rundet ab, sodass Sie möglicherweise 0 KB-Dateien sehen, aber es war nah genug für meine Zwecke und funktioniert unter OSX.
find . -type f -print0 | xargs -0 ls -la | awk '{print int($5/1000) " KB\t" $9}' | sort -n -r -k1
quelle
find . -type f
findet Dateien ... es funktioniert rekursiv, Sie haben Recht, aber es listet alle Dateien, die es findet, nicht die Verzeichnisse selbstMit
zsh
finden Sie die größte Datei (in Bezug auf die scheinbare Größe wie die Größenspalte in derls -l
Ausgabe, nicht die Festplattennutzung) mit:Für die 6 größten:
Die nach Dateigröße zu sortieren, können Sie
ls
‚s --S
Option. Einigels
Implementierungen haben auch die-U
Optionls
, die Liste nicht zu sortieren (da sie hier bereits nach Größe sortiertzsh
ist).quelle
Einfache Lösung für Mac / Linux, die Verzeichnisse überspringt:
quelle
Das Äquivalent in
BSD
oderOSX
istquelle
Dies ist aus verschiedenen Gründen ein unglaublich häufiges Bedürfnis (ich finde es toll, die neueste Sicherung in einem Verzeichnis zu finden) und ist eine überraschend einfache Aufgabe.
Ich werde eine Linux-Lösung bereitstellen, die die Dienstprogramme find, xargs, stat, tail, awk und sort verwendet.
Die meisten Leute haben einige eindeutige Antworten geliefert, aber ich bevorzuge meine, weil sie Dateinamen richtig handhabt und der Anwendungsfall leicht geändert werden kann (Änderung der Statistik und Sortierung der Argumente).
Ich werde auch eine Python-Lösung bereitstellen, mit der Sie diese Funktionalität auch unter Windows verwenden können
Linux-Befehlszeilenlösung
Gibt rekursiv die gesamte Liste nur der Dateien aus einem Verzeichnis zurück, sortiert nach Dateigröße
Wie zuvor, aber diesmal die größte Datei zurückgeben.
Gleiches genaues Muster, aber jetzt die neueste anstelle der größten Datei auswählen
Erläuterung:
Python-Lösung
Die Erklärung dieses Skripts dauert etwas länger. Wenn Sie es jedoch als Skript speichern, durchsucht es das erste Argument in der Befehlszeile und gibt die größte Datei in diesem Verzeichnis zurück. Das Skript führt keine Fehlerprüfung durch, sollte Ihnen jedoch eine Vorstellung davon geben, wie Sie dies in Python angehen können. Auf diese Weise können Sie dieses Problem plattformunabhängig lösen.
quelle
Variante dieser Antwort aus einer ähnlichen Frage
quelle
Versuchen Sie es mit dem folgenden Befehl mit der Sortieroption, um Ordner mit einer Größe in aufsteigender Reihenfolge zu erhalten
du -sh * | sort -sh
quelle
Auf jeder Plattform außer AIX und HP-UX funktioniert Folgendes:
quelle