Sie können find
die Ausgabe per Pipe ausführen (wodurch alle Dateien aufgelistet werden, an denen Sie interessiert sind) md5sum
.
xargs
wird benötigt, um das Erstellen einer Schleife zu vermeiden.
Um es in einen Befehl zu schreiben:
find . -maxdepth 1 -size +30M -type f -print0 | xargs -0 md5sum
.
sagt "fängt an, Elemente aus dem aktuellen Verzeichnis aufzulisten"-maxdepth 1
Gibt an, dass nur Dateien in diesem Verzeichnis aufgelistet werden sollen (nicht tiefer absteigen).-size +30M
gibt nur Dateien aufzulisten, die 30 Megabyte Speicherplatz überschreiten (Sie auch verwenden können,k
undG
lesen, wenn nötig Suffixe, um mehr über ihre Möglichkeiten in,man find
wenn erforderlich)-type f
vermeidet das Auflisten von Verzeichnissen - Sie können nichtmd5sum
für ein Verzeichnis zählen-print0
machtfind
separate Dateinamen mit dem Null-Byte. Wir verwenden dies, weil alles fehlschlägt, wenn Sie eine neue Zeile in Dateiname eingeben.
xargs
nimmt Sachen aus der Standardeingabe (dank -0
Flag wird das Null-Byte als Datensatztrennzeichen behandelt) und fügt sie als Argumente hinzu md5sum
.
Du kannst es auch ohne Pipe machen, aber ich finde diese Syntax verwirrend und ich ziehe es vor zu pfeifen an xargs
: find . -maxdepth 1 -size +30M -type f -execdir md5sum {} \;
Und wie @David in den Kommentaren schreibt, können Sie +
nach {}
, dh find . -maxdepth 1 -size +30M -type f -execdir md5sum {} + \;
.
Was ändert sich? md5sum
kann für zwei Dateien auf zwei Arten aufgerufen werden: md5sum file1; md5sum file2
oder md5sum file1 file2
. Ohne die +
Option erhalten Sie die erste Option. Fügen Sie +
Ergebnisse hinzu, wenn Sie die zweite Option ausführen. Der wichtigste Vorteil ist die Geschwindigkeit, da md5sum
nur einmal ausgeführt wird. Es kann nicht sein, dass vorteilhaft für einige Programme, aber in einigen Fällen kann ein Programm zum Beispiel dann läuft auf vielen Kernen und Speed-up der Arbeit um den Faktor NUM_CPUS.
Über diese seltsame Syntax (von man find
):
-execdir Befehl;
Befehl ausführen;
true
wenn der0
Status zurückgegeben wird Alle folgenden zu suchenden Argumente gelten als Argumente für den Befehl, bis ein Argument gefunden wird, das aus';'
besteht. Die Zeichenfolge'{}'
wird durch den aktuellen Dateinamen ersetzt, der überall dort verarbeitet wird, wo er in den Argumenten des Befehls vorkommt, nicht nur in Argumenten, in denen er sich alleine befindet, wie in einigen Versionen von find. Diese beiden Konstruktionen müssen möglicherweise mit (a'\'
) umgangen oder in Anführungszeichen gesetzt werden, um sie vor der Erweiterung durch die Shell zu schützen. Im Abschnitt BEISPIELE finden Sie Beispiele für die Verwendung der-execdir
Option. Der angegebene Befehl wird für jede übereinstimmende Datei einmal ausgeführt.