Pour répertorier les sous-répertoires immédiats contenant exactement les $NUM
fichiers.
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}'
Pour répertorier les sous-répertoires immédiats contenant des$NUM
fichiers supérieurs à .
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}'
Pour répertorier les sous-répertoires immédiats contenant moins de $NUM
fichiers.
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}'
Les éléments sont terminés par un caractère nul \0
, donc les noms de fichiers qui contiennent des sauts de ligne ou d'autres types d'espaces blancs seront interprétés correctement. Le %h
imprime chaque fichier dirname
. awk
utilise ensuite un tableau pour compter le nombre de fois qu'il rencontre chaque répertoire, en l'imprimant si les conditions sont remplies.
Veuillez noter qu'aucune des commandes susmentionnées n'affichera les répertoires contenant zéro fichier. Notez également que par fichier, je fais référence aux fichiers normaux, pas aux liens, répertoires, sockets, blocs, canaux nommés, etc.
J'ai essayé de le faire aussi simplement que possible. Si vous souhaitez rechercher des sous-répertoires récursifs ou les fichiers qu'ils contiennent, une commande modifiée est requise. Il y a trop de possibilités pour tous les énumérer.