GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie finde ich Dateien und summiere ihre Größe?

Lösung

Durch Angabe der Option -c (oder --total ) bis du(1) , können Sie es anweisen, eine Gesamtsumme zu erstellen. Wenn Ihre Implementierung von du(1) beide Optionen unterstützt, können Sie den gewünschten Effekt mit dem folgenden Befehl erzielen:

$ find . -name 'flibble*' -ctime +90 -exec du -shc {} +

BEARBEITEN: Beachten Sie, dass find, wenn die Anzahl der Dateien die von Ihrem System zugelassene maximale Anzahl von Parametern überschreitet kann immer noch command ausführen mehrmals. Einige Implementierungen von du(1) unterstützt auch das Lesen der Dateinamen aus einer Datei, die nicht unter der erwähnten Einschränkung leidet:

$ find -name 'flibble*' -ctime +90 -print0 > filenames
$ du -shc --files0-from=filenames

Erklärung

Der Unterschied zwischen der Semantik von -exec command {} \; und -exec command {} + lautet wie folgt:

  • command {} \; führt command aus einmal für jedes Ergebnis von find . Anstelle von {} wird der Pfadname des Ergebnisses übergeben .

    $ touch 1 2 3
    $ find  1 2 3 -maxdepth 0 -exec echo {} \;
    1
    2
    3
    
  • command {} + führt command aus , wenn alle Ergebnisse abgerufen wurden. Anstelle von {} werden die Pfadnamen der Ergebnisse übergeben .

    $ touch 1 2 3
    $ find  1 2 3 -maxdepth 0 -exec echo {} +
    1 2 3
    

Die -print0 Option verursacht find(1) um die gefundenen Dateinamen getrennt durch das Nullzeichen und den --files0-from auf der Standardausgabe auszugeben Option verursachte du(1) um die durch Nullen getrennten Dateinamen zu lesen. Im Gegensatz zum Zeilenumbruchzeichen darf das Nullzeichen nicht in einem Dateinamen vorkommen, sodass die Ausgabe eindeutig ist.

Um mehr über die Optionen von du(1) zu erfahren und find(1) , sollten Sie die entsprechenden Manpages konsultieren:

$ man du
$ man find

Versuchen Sie Folgendes:

du -c `find . -name 'flibble*' -ctime +90` | tail -1

Der ursprüngliche Befehl gibt dir ein Argument und führt es dann aus, bis alle Argumente durchlaufen sind. Auf diese Weise geben Sie ihm einfach alle Argumente auf einmal, schneiden dann die einzelnen Größen ab und lassen nur die Summe übrig. Sie können das Rohr und den Schwanz entfernen, um die Größe jeder Datei anzuzeigen, wenn Sie möchten.


Sie können dies versuchen:

find . -name 'flibble*' -ctime +90 -exec du -ch {} + | grep total

Linux
  1. So finden Sie MySQL-, PHP- und Apache-Konfigurationsdateien

  2. So finden Sie die Anzahl der Dateien in einem Verzeichnis und Unterverzeichnissen

  3. Wie suche ich nach Dateien nach Größe und Erweiterung?

  4. Verwenden von ls zum Auflisten von Verzeichnissen und ihrer Gesamtgröße

  5. Suchen und kopieren Sie Dateien

So finden und listen Sie die Dateien rekursiv nach Datum in Linux auf

So finden und löschen Sie doppelte Dateien in Linux

So finden und löschen Sie Dateien, die einen bestimmten Text in ihrem Namen in Linux enthalten

So finden Sie Dateien anhand ihrer Berechtigungen in Linux

So finden Sie doppelte Dateien in Linux und entfernen sie

So finden Sie Dateien in Debian