
Ich möchte alle Musikordner finden (und später löschen), die fast leer sind (Banshee löscht nur die Musikdateien, nicht aber die anderen darin enthaltenen Dateien).
Ich habe es versucht mit:
find -type d -size -500k \;
Es werden aber auch Ordner angezeigt, die größere Dateien enthalten.
find -type d -size -500k -exec du {} \;
zeigt die richtige Größe.
Wie ändere ich den Suchbefehl, um nur Ordner anzuzeigen, die kleiner als N sind?
Antwort1
Ein Befehl, den ich verwende, solange Sie dies nicht direkt in ein anderes Skript einspeisen müssen, ist
du . | sort -rn
Dadurch werden die kleinsten Ordner zusammen mit ihrer Größe am Ende der gedruckten Liste angezeigt. Das Herausfiltern der größeren Ordner wäre etwas aufwändiger.
Antwort2
Wenn Sie einfach Ordner löschen möchten, die weniger als N Bytes enthalten, funktioniert der folgende Einzeiler:
du | awk '$1 <= 500 { print "rm -rf \"" substr($0, length($1)+2) "\""}' | sh
Was bewirkt das? Nacheinander:
du
druckt die Größe von Verzeichnissen zusammen mit ihren Pfaden$1 <= 500
ist eine Bedingung, die prüft, ob die erste Spalte unter 500 liegt (wenn sie kleiner als 500 Bytes ist)print
in Awk-Druckenrm -rf "/path/to/small/dir"
| sh
leitet es in sh weiter, damit es ausgeführt werden kann
Sie könnten es auch mit xargs tun, anstatt es in sh weiterzuleiten, aber ich bin an diese Methode gewöhnt.