Auflisten von unmittelbaren Unterverzeichnissen, die genau $NUM
Dateien enthalten.
find -maxdepth 2 -mindepth 2 -type f -printf '%h\0' | awk -v num="$NUM" 'BEGIN{RS="\0"} {array[$0]++} END{for (line in array) if (array[line]==num) printf "%s\n", line}'
Zum Auflisten von unmittelbaren Unterverzeichnissen, die mehr als $NUM
Dateien enthalten.
find -maxdepth 2 -mindepth 2 -type f -printf '%h\0' | awk -v num="$NUM" 'BEGIN{RS="\0"} {array[$0]++} END{for (line in array) if (array[line]>num) printf "%s\n", line}'
Zum Auflisten von unmittelbaren Unterverzeichnissen, die weniger als $NUM
Dateien enthalten.
find -maxdepth 2 -mindepth 2 -type f -printf '%h\0' | awk -v num="$NUM" 'BEGIN{RS="\0"} {array[$0]++} END{for (line in array) if (array[line]<num) printf "%s\n", line}'
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 Datei dirname
. 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.