GNU/Linux >> Tutoriels Linux >  >> Linux

Liste du nombre de fichiers dans chaque dossier où le nom du dossier correspond à un modèle ?

Je souhaite effectuer une recherche récursive dans une arborescence de répertoires et répertorier le nombre de fichiers disponibles dans chaque dossier dont le nom correspond à une chaîne donnée. En effet, je souhaite renvoyer les résultats de :

ls -l | wc -l

pour chaque dossier que j'ai identifié via find .

Code

Le code ci-dessous répertorie correctement le nombre de fichiers dans chaque dossier dont le nom contient Magic Data chaîne.

find /path/to/cool/stuff                                 
        -maxdepth 4                                      
        -type d                                          
        -name '*Magic Data*'                             
        -print0 | xargs                                  
                --verbose                                
                -0 -I {} ls -l {}               

Je voudrais le développer et diriger les résultats de ls à wc -l .

Essayer

find /path/to/cool/stuff                                 
        -maxdepth 4                                      
        -type d                                          
        -name '*Magic Data*'                             
        -print0 | xargs                                  
                --verbose                                
                -0 -I {} ls -l {}  | wc -l            

Cela échoue et imprime :

ls -l /path/to/cool/stuff/some/folders/Magic Data
ls -l /path/to/cool/stuff/some/folders2/Magic Data

Sortie souhaitée

/path/to/cool/stuff/some/folders/Magic Data  29
/path/to/cool/stuff/some/folders2/Magic Data 30

La sortie souhaitée contiendrait :

  • Chemin complet du dossier recherché
  • Sortie de wc -l , qui dans ce cas reflète le nombre de fichiers non cachés

Réponse acceptée :

Il existe deux façons principales de résoudre ce problème :

  1. Modifier le find commande afin qu'elle n'entre que dans les répertoires qui vous intéressent, puis imprime un seul caractère (par exemple, x ) pour chaque fichier trouvé à l'intérieur. Comptez ensuite le nombre de ce caractère produit avec wc -l . Il est plus sûr de sortir un caractère que le nom de chemin car les noms de chemin sous Unix peuvent potentiellement contenir des retours à la ligne. Cette solution est un peu délicate car elle implique l'utilisation de -prune pour ignorer les répertoires qui ne nous intéressent pas, ou alternativement ! -path .

  2. Trouvez les répertoires comme vous l'avez fait jusqu'à présent, mais utilisez ensuite un script en ligne pour compter les fichiers qu'ils contiennent. C'est plus simple, et ce que je montre ci-dessous.

find /path/to/cool/stuff -maxdepth 4 -type d -name "*Magic Data*' 
    -exec bash -O dotglob -c '
        dir=$1
        set -- "$dir"/*
        printf "%s %dn" "$dir" "$#"' bash {} ';'

Ici, on retrouve les répertoires comme vous le faites, puis, pour chaque répertoire, on lance ce court bash script :

dir=$1
set -- "$dir"/*
printf "%s %dn" "$dir" "$#"

Cela prend le chemin du répertoire de la ligne de commande (donné par find ), et développe le * motif glob en son sein. En définissant le dotglob option shell sur la ligne de commande du script, nous sommes assurés de compter également les fichiers et répertoires cachés (supprimez -O dotglob pour ne pas compter les noms masqués).

En relation :Comment activer l'accès aux périphériques USB dans les invités VirtualBox ?

Nous faisons l'expansion de tous les noms en tant qu'argument de set , qui définira les paramètres de position sur les entrées développées. Le nombre de paramètres positionnels est disponible sous la forme $# , qui est donc également le nombre de fichiers dans ce répertoire particulier.

Connexe :

  • Comprendre l'option -exec de `find`

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

  2. Comment imprimer le nom des fichiers manquants dans un dossier ?

  3. Quelle est la meilleure façon de compter le nombre de fichiers dans un répertoire ?

  4. Comment puis-je créer un fichier dans chaque dossier ?

  5. Trouver tous les fichiers dont le nom contient une chaîne

Comment trouver un nom de processus à l'aide d'un numéro PID sous Linux

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

Comment compter le nombre total de lignes de fichiers trouvés ?

Trouver des répertoires contenant un certain nombre de fichiers

Où trouver les fichiers journaux de connexion SSH sur centos

Un moyen plus rapide de supprimer un grand nombre de fichiers