Wie finde ich kleine, nicht leere Ordner?

Wie finde ich kleine, nicht leere Ordner?

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:

  • dudruckt die Größe von Verzeichnissen zusammen mit ihren Pfaden
  • $1 <= 500ist eine Bedingung, die prüft, ob die erste Spalte unter 500 liegt (wenn sie kleiner als 500 Bytes ist)
  • printin Awk-Druckenrm -rf "/path/to/small/dir"
  • | shleitet 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.

verwandte Informationen