GNU/Linux >> Tutoriels Linux >  >> Linux

Trouver des répertoires contenant un certain nombre de fichiers

Vous pouvez essayer ceci, pour obtenir les noms des sous-répertoires et le nombre de fichiers/répertoires qu'ils contiennent :

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \;

Si vous voulez faire la même chose pour tous les sous-répertoires (recherche récursive), utilisez ceci à la place :

find . -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \;

Pour sélectionner les répertoires contenant exactement 10 fichiers :

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; | 
  awk '$NF==10'

10 ou plus :

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; | 
 awk '$NF>=10'

10 ou moins :

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; | 
 awk '$NF<=10'

Si vous souhaitez conserver uniquement le nom du répertoire (par exemple, si vous souhaitez le diriger vers un autre processus en aval, comme suggéré par @evilsoup), vous pouvez utiliser ceci :

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{}\t'; ls '{}' | wc -l" \; | 
 awk -F"\t" '$NF<=10{print $1}'

Pour lister les sous-répertoires immédiats contenant exactement $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 lister les sous-répertoires immédiats contenant grand supérieur à $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 lister les sous-répertoires immédiats contenant moins supérieur à $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 , ainsi les noms de fichiers qui contiennent des retours à la ligne ou d'autres types d'espaces blancs seront interprétés correctement. Le %h imprime le dirname de chaque fichier . awk utilise ensuite un tableau pour compter le nombre de fois qu'il rencontre chaque répertoire, en l'affichant 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 à des fichiers normaux, pas liens, répertoires, sockets, blocs, tubes nommés, etc.

J'ai essayé de faire ça le plus simplement 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 toutes les énumérer.


Essayez ceci :

[ `trouver . | wc -l` -eq 10 ] &&echo "Trouvé"

[ `trouver . | wc -l` -gt 10 ] &&echo "Trouvé"

[ `trouver . | wc -l` -lt 10 ] &&echo "Trouvé"

Dans ces exemples, vous pouvez vérifier si le répertoire CURRENT contient exactement 10, plus de 10 et moins de 10 fichiers/répertoires. Si vous avez besoin de vérifier un tas de répertoires, utilisez simplement la boucle.


Linux
  1. Trouver des fichiers et des répertoires sous Linux comme un pro

  2. Comment utiliser Wc And Piping pour trouver combien de fichiers et de répertoires se trouvent dans un certain répertoire ?

  3. Trouver les plus gros fichiers ou répertoires ?

  4. Reformatage d'un grand nombre de fichiers XML ?

  5. Comment rechercher et supprimer des répertoires et des fichiers vides sous Unix

Comment trouver le nombre de fichiers dans un répertoire et des sous-répertoires

Rechercher la commande sous Linux (Rechercher des fichiers et des répertoires)

3 façons de trouver des fichiers et des répertoires sous Linux

Trouvez facilement des fichiers et des répertoires sur Linux

Linux :rechercher le nombre de fichiers dans un répertoire et des sous-répertoires

Un moyen plus rapide de supprimer un grand nombre de fichiers