Wir starten gerade eine UNIX-Klasse und lernen eine Vielzahl von Bash-Befehlen. Unsere Aufgabe besteht darin, verschiedene Befehle in einem Verzeichnis auszuführen, in dem sich auch eine Reihe von Ordnern befinden.
Ich weiß, wie man alle regulären Dateien aus dem Stammordner auflistet und zählt, indem ich:
find . -type l | wc -l
Aber ich würde gerne wissen, wohin ich von dort aus gehen soll, um die größte Datei im gesamten Verzeichnis zu finden. Ich habe etwas in Bezug auf einen du
Befehl gesehen, aber das haben wir nicht gelernt. Im Repertoire der Dinge, die wir gelernt haben, gehe ich davon aus, dass wir es irgendwie mit dem ls -t
Befehl verbinden müssen.
Und verzeihen Sie mir, wenn mein 'Jargon' nicht korrekt ist, gewöhne ich mich immer noch daran!
man
gefolgt von dem Befehl, an dem Sie interessiert sind. Nach oben wird ein netter manueller Eintrag für diesen Befehl angezeigt (drücken Sieq
, um zur Befehlszeile zurückzukehren).Antworten:
Zitat aus diesem Link-
quelle
'%s %p\n'
mit'%p\n'
und das Hinzufügen|xargs ls -lh
zu Endedu -am . | sort -nr | grep '\..*\.' | head
. Diesm
dient zur Anzeige der Dateigröße in Megabyte und zur Anzeige vongrep
Zeilen mit mindestens zwei Punkten. Die erste befindet sich im./
Pfad, die zweite in der Dateierweiterung, z.mov
.So finden Sie die 25 besten Dateien im aktuellen Verzeichnis und seinen Unterverzeichnissen:
find . -type f -exec ls -al {} \; | sort -nr -k5 | head -n 25
Dadurch werden die Top-25-Dateien ausgegeben, indem nach der Größe der Dateien mit dem Piping-Befehl "sort -nr -k5" sortiert wird.
Gleich, aber mit lesbaren Dateigrößen:
find . -type f -exec ls -alh {} \; | sort -hr -k5 | head -n 25
quelle
Ausgänge
Wenn Sie nur den Dateinamen möchten:
Dies vermeidet die Verwendung
awk
und ermöglicht es Ihnen, beliebige Flags zu verwendenls
.Einschränkung . Da
xargs
versucht wird, das Erstellen überlanger Befehlszeilen zu vermeiden, kann dies fehlschlagen, wenn Sie es in einem Verzeichnis mit vielen Dateienls
ausführen, da es am Ende mehrmals ausgeführt wird. Es ist kein unüberwindbares Problem (Sie können diehead -n 1
Ausgabe von jedemls
Aufruf sammeln undls -S
erneut ausführen und eine Schleife ausführen , bis Sie eine einzelne Datei haben), aber es beeinträchtigt diesen Ansatz etwas.quelle
xargs
, ich habe dich vernachlässigt +1find . -type f -print0 | xargs -0 ls -lS | head -n 1
xargs
ausgeführt wurden. Um dies zu beheben, fügen Sie die Sortierung hinzu :find . -type f -print0 | xargs -0 ls -lS | sort -rk 5 | head -n 10
. Hat für mich an OSX gearbeitet.Es ist kein einfacher Befehl verfügbar, um die größten Dateien / Verzeichnisse in einem Linux / UNIX / BSD-Dateisystem herauszufinden. Durch die Kombination der folgenden drei Befehle (mithilfe von Pipes) können Sie jedoch leicht die Liste der größten Dateien ermitteln:
Wenn Sie eine besser lesbare Ausgabe wünschen, versuchen Sie:
Wo,
quelle
Dies listet Dateien rekursiv auf, wenn es sich um normale Dateien handelt, sortiert nach dem 7. Feld (das ist die Größe in meiner
find
Ausgabe; überprüfen Sie Ihre) und zeigt nur die erste Datei an.Die erste Option
find
ist der Startpfad für die rekursive Suche. Ein Typ derf
Suche nach normalen Dateien. Beachten Sie, dass Sie möglicherweise fehlschlagen, wenn Sie versuchen, dies als Dateinamen zu analysieren, wenn der Dateiname Leerzeichen, Zeilenumbrüche oder andere Sonderzeichen enthält. Die Optionen zusort
auch je nach Betriebssystem variieren. Ich benutze FreeBSD.Eine "bessere", aber komplexere und schwerere Lösung wäre,
find
die Verzeichnisse zu durchlaufen, aber möglicherweise zu verwendenstat
, um die Details der Datei abzurufen, und dann möglicherweiseawk
, um die größte Größe zu finden. Beachten Sie, dass die Ausgabe vonstat
auch von Ihrem Betriebssystem abhängt.quelle
+7
Arg tun? Auf meinem Computer beschwert sich sort nur, dass es keine aufgerufene Datei finden kann+7
.sort
auf Ihrem System. Ich verwende derzeit OS X 10.4, wo die Verwendung von der Sortierung von FreeBSD herrührt :sort [-cmus] [-t separator] [-o output-file] [-T tempdir] [-bdfiMnr] [+POS1 [-POS2]] [-k POS1[,POS2]] [file...]
... Beachten Sie die+POS [-POS2]
. Dies funktioniert auch in aktuellen Versionen von FreeBSD.-k
z.sort -k 7
. edit: unter OSX 10.5 scheint sich die Manpage zum Sortieren auf die Version geändert zu haben, die ich habe.[+POS1] [-POS2]
Notation ist nur eine ältere. Soweit ich das beurteilen kann, wird diese Notation immer noch von der modernen GNU-Sortierung unterstützt, obwohl sie nach meinem Erscheinen nach etwa Version 5.1 von der Sortier-Manpage entfernt worden zu sein scheint. Sie können es in der Manpage zum Sortieren für FreeBSD 4.11 sehen . Ich glaube, ich habe die Manpage von sort seit der Veröffentlichung von FreeBSD 5.0 nicht mehr gelesen!+POS1
Sortierparameter von Null und-k POS1
von Eins zählen.Hier finden Sie die größte Datei oder den größten Ordner in Ihrem aktuellen Arbeitsverzeichnis:
So finden Sie die größte Datei in allen Unterverzeichnissen:
quelle
ls
. In meinen Tests-S
listet das Flag eine Datei pro Zeile auf. Ich habe den zweiten Befehl korrigiert. Hoffentlich ist es jetzt voll beweiskräftig. Danke.Unter Solaris verwende ich:
oder
weil alles andere, was hier gepostet wurde, nicht funktioniert hat. Dies findet die größte Datei in
$PWD
und Unterverzeichnissen.quelle
Probieren Sie den folgenden Einzeiler aus (zeigen Sie die 20 größten Dateien an):
oder (vom Menschen lesbare Größen):
Diese Aliase sind also nützlich, um sie in Ihren RC- Dateien zu haben:
quelle
Versuchen Sie folgenden Befehl:
Dies druckt den größten Dateinamen und die größte Dateigröße und mehr als 500 MB. Sie können das verschieben
if($1 > 500000)
, und es wird die größte Datei im Verzeichnis gedruckt.quelle
du -aS /PATH/TO/folder | sort -rn | head -2 | tail -1
oder
du -aS /PATH/TO/folder | sort -rn | awk 'NR==2'
quelle
Dieses Skript vereinfacht das Auffinden der größten Dateien für weitere Aktionen. Ich behalte es in meinem ~ / bin-Verzeichnis und lege ~ / bin in meinen $ PATH.
quelle
Das ist ganz einfach:
Und du wirst das bekommen:
8445 examples.desktop
quelle
1***
soll am Ende tun? Ich erhalte den Fehler "Keine Übereinstimmungen gefunden" für dieses Argument.Linux-Lösung: Beispielsweise möchten Sie alle Dateien / Ordnerlisten Ihres Home-Verzeichnisses (/) entsprechend der Datei- / Ordnergröße ( absteigende Reihenfolge) anzeigen ) .
sudo du -xm / | sort -rn | Mehr
quelle
So listen Sie die größere Datei in einem Ordner auf
Die Ausgabe von
ls -sh
ist eine vergrößertes
und für den Menschenh
verständliche Ansicht der Dateigrößenzahl.Sie könnten verwenden
ls -shS /pathFolder | head -n 1
. Je größerS
ausls
bereits um die Liste von den größeren Dateien zu den kleineren , aber die ersten seine der Summe aller Dateien in diesem Ordner führen. Wenn Sie also nur die größere Datei, eine Datei, auflisten möchten, müssen Siehead -n 2
das "Ergebnis der zweiten Zeile" überprüfen oder das erste Beispiel mit verwendenls sort head
.quelle
quelle