Ich versuche, alle großen Dateien auf meinem Centos-Server zu finden. Dazu benutze ich:
find / -maxdepth 10 -size +100000 -ls
Ich habe versucht, zu wechseln -ls
, -lsh
aber es ist nicht erlaubt.
Wie kann ich diese Ergebnisse mit lesbaren Größen anzeigen (mit den Suffixen k, M,…)?
file
Dienstprogramm mit versuchenfind
.Antworten:
find
hat keine ausgeklügelten Optionen wiels
. Wenn Sie möchtenls -h
, müssen Sie anrufenls
.Ich empfehle die
-xdev
Option, ein erneutes Auftreten in andere Dateisysteme zu vermeiden. Dies wäre nutzlos, wenn Sie sich Gedanken über den Speicherplatz machen.Wenn Sie zsh als Shell verwenden
find
, können Sie anstelle von glob Glob-Qualifizierer verwenden. Das Begrenzen der Dateigröße ist einfach:L
gefolgt von einer Größe; Die Größe kann eine optionale Einheit vor der Nummer haben. Wenn Sie sich nicht für die maximale Tiefe**/
interessieren , können Sie in Unterverzeichnisse zurückgreifen. Wenn Sie sich für maximale Tiefe interessieren, ist dies umständlicher, da zsh-Glob-Muster keine Möglichkeit bieten, „höchstens n Vorkommen“ auszudrücken . Verwenden Sie dasd
Glob-Qualifikationsmerkmal, um eine geräteübergreifende Rekursion zu vermeiden . Sie müssen die Gerätenummer finden, die Sie mit dem anzeigen könnenstat
Befehl unter Linux (stat -c %d /
um nur die Nummer anzuzeigen) oder mit dem von zsh selbststat
eingebauten Gerät (zmodload zsh/stat
zum Laden ausführen ) anzeigen können.quelle
Der Befehl, den Sie versuchen, ist für mich lesbar. Sie können jedoch das Dateidienstprogramm mit der folgenden Suche verwenden.
Eine andere Möglichkeit, dies zu tun, ist die Verwendung des folgenden Befehls.
Mit dem obigen Befehl erhalten Sie die Dateien in der sortierten Dateigröße.
Wenn Sie coreutils> 7.5 verwenden , können Sie den folgenden Befehl ausführen, um die Dateien nach Größen aufzulisten.
In meiner Maschine hatte ich das nicht
sort -h
Option nicht verfügbar.Wie Sie im Kommentar erwähnt hatten, ist Ihr lesbares Format, dass die Datei die Größe in KB , MB oder GB haben sollte . Ich würde mit dem zweiten Befehl gehen, den ich als Antwort gepostet hatte. Die Ausgabe, die ich erhielt, als ich sie in meinem System verwendete, ist:
quelle
> output
sie dem Befehl hinzufügen . Dann können Sie die Datei öffnen und die Ausgabe anzeigen, wie Sie möchten :)du -a --max-depth=10 / | sort -rn
ist der Abschluss, den ich mir einfallen lassen könnte. In diesem Fall wird die Größe jedoch nicht in KB, MB oder GB angezeigt.Ich denke, was Sie suchen, ist eher wie folgt.
Mit
-exec
können Sie einen Befehl ausführen und das{}
wird durch das Ergebnis der Suche ersetzt. Zuletzt+
ist zu sagen, dass es das Ende des Befehls ist und es erforderlich ist.quelle
{}
hier zu zitieren . Die einfachen Anführungszeichen im Befehl gelten für die Shell, aber die Shell wird denls -lah <args...>
Befehl niemals sehen - sie sieht{}
, was nicht in Anführungszeichen gesetzt werden muss. Es ist dasfind
, was das siehtls -lah {}
und es ist dasfind
, was das erweitert{}
und, wie durch den Namen der-exec
Option impliziert ,find
einenexec*
Systemaufruf für die Argumente direkt verwendet, sodass es keine Probleme mit Leerzeichen gibt, dafind
keine Wortaufteilung durchgeführt wird auf Ihren Dateinamen.-a
Option tols
ist nicht erforderlich, da erwartet wird, dass die Argumente Dateien und keine Verzeichnisse sind. GNU findet Verwendungenls -dils
für die-ls
Option, um dies so genau wie möglich zu replizierenls -dilsh
.find . -type f -exec file '{}' \;
Läuft Datei für jede Datei in oder unterhalb des aktuellen Verzeichnisses. Beachten Sie, dass die geschweiften Klammern in einfache Anführungszeichen eingeschlossen sind, um sie vor der Interpretation als Interpunktion für Shell-Skripte zu schützen. Das Semikolon wird in ähnlicher Weise durch die Verwendung eines Backslash geschützt, obwohl auch in diesem Fall einfache Anführungszeichen verwendet werden könnten.{}
zitiert werden muss.