Wie lösche ich alle Dateien, die kleiner als eine bestimmte Größe sind, in allen Unterordnern?

88

Ich habe einen Ordner mit vielen Unterordnern, die kleine TIF-Dateien (weniger als 160 KB) enthalten, die zu größeren PDF-Dateien zusammengefügt wurden, zusammen mit einigen großen mehrseitigen TIF-Dateien.

Ich möchte alle kleinen tif-Dateien löschen, ohne die größeren Dateien (tif oder pdf) zu löschen und die Verzeichnisstruktur beizubehalten. Wie gehe ich unter Linux über die Befehlszeile vor?

Machen
quelle

Antworten:

155
find . -name "*.tif" -type 'f' -size -160k -delete

Führen Sie den Befehl aus, ohne -deletezuvor zu überprüfen, ob die richtigen Dateien gefunden wurden.

Beachten Sie das -vorher 160k. Bedeutet 160kgenau 160 Kilobyte. -160kbedeutet kleiner als 160 Kilobyte. +160kbedeutet größer als 160 Kilobyte.

Die -type 'f'Kräfte der Befehl nur wirken auf Dateien und Verzeichnisse überspringen. Dies würde Fehler vermeiden, wenn der Pfad Ordner mit Namen enthält, die dem Muster entsprechen *.tif.

Wenn Sie in Bytes filtern Größe wollen (wie in 160 Bytes statt 160 Kilobyte) , dann müssen Sie es wie folgt schreiben: 160c. Wenn Sie nur schreiben 160, wird dies als 160 * 512 Byte interpretiert. Dies ist eine merkwürdige Anforderung von POSIX. Weitere Informationen finden Sie hier: https://unix.stackexchange.com/questions/259208/purpose-of-find-commands-default-size-unit-512-bytes

Lesmana
quelle
Die Ubuntu-Manpage scheint dies zu erwähnen. Direkt unter dem Abschnitt "TESTS": Numerische Argumente können als + n für mehr als n, -n für weniger als n, n für genau n angegeben werden.
jdg
1
Vielen Dank. Es ist mir nicht in den Sinn gekommen, dass sich die Informationen an einer anderen Stelle in der Manpage befinden.
Lesmana
Schön, dass dieser Befehl auch rekursiv funktioniert. Mein Anwendungsfall wäre, TXT-Dateien unter 12 KB zu löschen.
So,
kein sudo nötig?
Jean-François Gagnon
11
Für Größen in Bytes geben Sie 50c an, nicht 50b oder 50!
Evengard