Ich hatte gehofft, dass ich dies mit dem find
Befehl tun kann, aber ich kann im Handbuch keinen Test dafür sehen, was ich will. Ich möchte in der Lage sein, alle Verzeichnisse im Arbeitsverzeichnis zu finden, die weniger als, mehr als oder genau die von mir angegebene Anzahl enthalten.
find . -filecount +10 # any directory with more than 10 entries
find . -filecount 20 # any directory with exactly 20 entries
Aber leider gibt es keine solche Option.
Antworten:
Sie können dies versuchen, um die Namen der Unterverzeichnisse und die Anzahl der darin enthaltenen Dateien / Verzeichnisse abzurufen:
Wenn Sie dasselbe für alle Unterverzeichnisse tun möchten (rekursive Suche), verwenden Sie stattdessen Folgendes:
So wählen Sie die Verzeichnisse mit genau 10 Dateien aus:
10 oder mehr:
10 oder weniger:
Wenn Sie nur den Verzeichnisnamen behalten möchten (z. B. wenn Sie ihn an einen anderen Prozess weiterleiten möchten, wie von @evilsoup vorgeschlagen), können Sie Folgendes verwenden:
quelle
find . -type d -exec bash -c 'echo -ne "{} "; ls "{}" | wc -l' \; | awk '$NF<=10'
Auflisten von unmittelbaren Unterverzeichnissen, die genau
$NUM
Dateien enthalten.Zum Auflisten von unmittelbaren Unterverzeichnissen, die mehr als
$NUM
Dateien enthalten.Zum Auflisten von unmittelbaren Unterverzeichnissen, die weniger als
$NUM
Dateien enthalten.Elemente werden durch ein Nullzeichen abgeschlossen
\0
, sodass Dateinamen, die Zeilenumbrüche oder andere Arten von Leerzeichen enthalten, korrekt interpretiert werden. Das%h
druckt jede Dateidirname
.awk
Verwendet dann ein Array, um zu zählen, wie oft es auf jedes Verzeichnis trifft, und druckt es, wenn die Bedingungen erfüllt sind.Bitte beachten Sie, dass keiner der oben genannten Befehle Verzeichnisse anzeigt, die keine Dateien enthalten. Beachten Sie auch, dass ich mich mit Datei auf reguläre Dateien beziehe, nicht auf Links, Verzeichnisse, Sockets, Blöcke, Named Pipes usw.
Ich habe versucht, dies so einfach wie möglich zu machen. Wenn Sie rekursive Unterverzeichnisse oder die darin enthaltenen Dateien suchen möchten, ist ein geänderter Befehl erforderlich. Es gibt zu viele Möglichkeiten, sie alle aufzulisten.
quelle
Versuche dies:
In diesen Beispielen können Sie überprüfen, ob das CURRENT-Verzeichnis genau 10, mehr als 10 und weniger als 10 Dateien / Verzeichnisse enthält. Wenn Sie eine Reihe von Verzeichnissen überprüfen müssen, verwenden Sie einfach loop.
quelle
.
), das Sie möglicherweise entsprechend ändern möchten.wc -l < <(printf %s\\n ./*)
oderprintf %s\\n ./* | wc -l
innerhalb des Tests arbeiten, um einen unnötigenfind
Anruf zu vermeiden . Dadurch wird auch das von @terdon festgestellte Problem vermieden,.
in das Ergebnis aufgenommen zu werden. Es würde jedoch auch auf das Problem stoßen, Dateien zu ignorieren, die mit a beginnen.
; Ich würde dies mit lösenshopt -s dotglob
(damit Globs mit Dateien übereinstimmen, die mit a beginnen.
, aber nicht.
oder..
).