Ich muss einige Ordner bereinigen und möchte Verzeichnisse entfernen, die 10 oder weniger Dateien enthalten. Ich habe versucht, mir GNUs anzusehen find
, aber es gab nichts, was mit der Anzahl der Dateien in einem Verzeichnis zu tun hatte. Mit welchen Befehlen soll ich das erreichen?
7
Antworten:
Eine Möglichkeit wäre, mit
find
der-exec
Aktion 's einen benutzerdefinierten Test der Anzahl der Dateien auszuführen.Man könnte einen zweiten
find
Befehl zusammen mit verwendenwc
, um Dateien in jedem Verzeichnis zu finden und zu zählen, aber wahrscheinlich wäre eine bessere Option, das Globbing zu schälen, um die Dateinamen in ein Array zu schlürfen, und dann einen logischen Wert zurückzugeben, der angibt, ob die Größe des Arrays kleiner ist als die Schwelle dhDass sie alle zusammen sollten wir in der Lage sein listen alle Unterverzeichnisse mit weniger als 10 Dateien (einschließlich der Unterverzeichnisse) mit
(Sie können die Zahl
10
nach dembash {}
für verschiedene Schwellenwerte anpassen. Bei der${2:-10}
Parametererweiterung werden standardmäßig 10 Dateien verwendet, wenn kein zweites Argument angegeben wird.) Zum Beispiel gegebendann
Wenn dies das Richtige zu sein scheint, können Sie sie tatsächlich durch Hinzufügen entfernen,
rm -rf
aber seien Sie bitte sehr vorsichtig - denken Sie daran, dass es kein "Rückgängigmachen" gibt.(Das
xargs
könnte beseitigt werden, indem eine andere-exec
Aktion verwendet wird, umrm
direkter auszuführen , aber die obige Formulierung erleichtert die Verallgemeinerung - Drucken, Statisieren, Entfernen oder was auch immer.)Beachten Sie, dass dies rekursiv erfolgt, dh ein Verzeichnis, das anfänglich mehr als
n
Dateien einschließlich Unterverzeichnisse enthält, kann entfernt werden, da einige dieser Unterverzeichnisse selbst entfernt werden,find
um den Verzeichnisbaum zu sichern. Das aktuelle Verzeichnis ist ausdrücklich vor einem möglichen Löschen durch den! -name '.'
Test geschützt .Wenn Sie es nicht benötigen, um rekursiv zu handeln, können Sie einfach Verzeichnisse durchlaufen und dieselbe Dateizählung und Testlogik ausführen, z. B. um alle Verzeichnisse der ersten Ebene zu entfernen, die weniger als 10 Dateien im aktuellen Verzeichnis enthalten
quelle
Ich habe das nicht vollständig getestet, aber es sollte funktionieren. Sie können dies auch verwenden
find
, um dies zu erreichen.quelle
wc -l
die falsche Nummer angegeben wird, wenn in Dateinamen Zeilenumbrüche enthalten sind.