Forum général.général Comptage nombre de fichier en arborescence

Posté par  (site web personnel) .
Étiquettes : aucune
0
4
nov.
2008
Bonjour,

je cherche à compter le nombre de fichier disponible dans un arborescence.

Soit l'arbo suivante

foo/
foo/bar1/
foo/bar1/fichier1
foo/bar1/fichier2
foo/bar1/fichier3
foo/bar2/
foo/bar2/fichier1
foo/bar2/fichier2

je cherche en une ligne de commanda à obtenir le résultat suivant : 3,2

Soit 3 qui signifie qu'il y a 3 fichier dans la branche foo/bar1 et 2 qu'il y a 2 fichier dans la branche foo/bar2

On sait d'avance que les fichier sont tous situé à la même profondeur de l'arborescence (celà facilite les chose), exemple, par rapport au dossier foo, ici les fichiers sont toujours situé un répertoire en dessous.

(accessoirement, les fichiers répondent toujours au même nommage suivant: 1.gif, 2.gif, 3.gif etc etc (ca doit pouvoir aider à compter ca aussi)

Merci par avance, Uld
  • # Si c'est pas clair

    Posté par  (site web personnel) . Évalué à 2.

    Au cas ou ce serait pas clair, voici un dump de mon arborescence:

    15:04 arkhan@asgard ~/public_html/images/avatars/generateur% ls -R alchimiste
    alchimiste:
    femme/ homme/

    alchimiste/femme:
    accessoires/ bouche/ chaussures/ cheveux/ corps/ main_droite/ pantalon/ torse/ yeux/

    alchimiste/femme/accessoires:
    10.gif 11.gif 1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gif 8.gif 9.gif

    alchimiste/femme/bouche:
    1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gif 8.gif

    alchimiste/femme/chaussures:
    1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gif

    alchimiste/femme/cheveux:
    10.gif 13.gif 16.gif 19.gif 21.gif 24.gif 27.gif 2.gif 32.gif 35.gif 4.gif 7.gif
    11.gif 14.gif 17.gif 1.gif 22.gif 25.gif 28.gif 30.gif 33.gif 36.gif 5.gif 8.gif
    12.gif 15.gif 18.gif 20.gif 23.gif 26.gif 29.gif 31.gif 34.gif 3.gif 6.gif 9.gif

    alchimiste/femme/corps:
    1.gif 2.gif 3.gif 4.gif 5.gif 6.gif

    alchimiste/femme/main_droite:
    1.gif 2.gif

    alchimiste/femme/pantalon:
    10.gif 1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gif 8.gif 9.gif

    alchimiste/femme/torse:
    10.gif 1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gif 8.gif 9.gif

    alchimiste/femme/yeux:
    10.gif 11.gif 12.gif 13.gif 14.gif 15.gif 16.gif 1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gif 8.gif 9.gif

    alchimiste/homme:
    accessoires/ bouche/ chaussures/ cheveux/ corps/ main_droite/ pantalon/ torse/ yeux/

    alchimiste/homme/accessoires:
    1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gif 8.gif 9.gif

    alchimiste/homme/bouche:
    1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gif 8.gif

    alchimiste/homme/chaussures:
    1.gif 2.gif 3.gif 4.gif 5.gif 6.gif

    alchimiste/homme/cheveux:
    10.gif 12.gif 14.gif 16.gif 18.gif 1.gif 21.gif 23.gif 2.gif 4.gif 6.gif 8.gif
    11.gif 13.gif 15.gif 17.gif 19.gif 20.gif 22.gif 24.gif 3.gif 5.gif 7.gif 9.gif

    alchimiste/homme/corps:
    1.gif 2.gif 3.gif 4.gif 5.gif 6.gif

    alchimiste/homme/main_droite:
    1.gif 2.gif

    alchimiste/homme/pantalon:
    1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gif 8.gif 9.gif

    alchimiste/homme/torse:
    1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gif

    alchimiste/homme/yeux:
    10.gif 11.gif 12.gif 13.gif 14.gif 15.gif 16.gif 1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gif 8.gif 9.gif
  • # Commande 'tree'

    Posté par  (site web personnel) . Évalué à 4.

    Regardes peut-être du côté de la commande tree qui pour un répertoire donné fournit le nombre de répertoires et de fichiers.

    Sinon, il te reste à écrire un script basé sur les commandes ls et wc qui parcourera l'arborescence.
  • # avec find et wc

    Posté par  . Évalué à 4.

    La ligne suivante devrait fonctionner, et en bonus, quelque soit la profondeur de ton arborescence:

    R="" ; for dir in $(find . -type d) ; do R=$R",$(find "$dir" -maxdepth 1 -type f |wc -l)" ; done ; echo $R


    Donc en gros, on initialise la variable contenant le résultat, puis on recherche tout les répertoires de notre arborescence (find -type d).
    Pour chacun des répertoires trouvés, on cherche le nombre de fichier qu'il contient, sans descendre ds les sous répertoires (find -type f -maxdepth 1 | wc -l).
    On ajoute le résultat à R qu'on affiche ensuite.
  • # man find

    Posté par  (site web personnel) . Évalué à 4.

    Essaie d'utiliser find pour les parcours. Par exemple ceci :
    find foo/bar2 -type f | wc -l
    Te donnera le nombre de fichiers dans le répertoire bar2

    Tu peux ensuite utiliser l'option maxdepth de find pour ne pas lister les fichiers d'éventuels sous répertoires.

    for f in $(find . -type d); do echo "$f : $(find $f -maxdepth 1 -type f | wc -l)"; done

    Ça devrait te donner un truc du genre:
    foo/bar1 : 5
    foo/bar2 : 6
    etc.

    Par contre faut faire gaffe aux espaces dans les chemins, je ne les ai pas gérés pas pour aller plus vite...
  • # facile

    Posté par  . Évalué à 4.

    echo "3,2"

    désolé --->[ ]

    Vous voulez pas la jouer soft ? Je suis pas contraignant... vous voulez la jouer hard ? On va la jouer hard

  • # plop

    Posté par  . Évalué à 2.

    ls */*/* | xargs -n 1 dirname | uniq -c | awk '{printf("%d, ",$1) }END{print $1}'

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

  • # Find et Awk

    Posté par  (site web personnel) . Évalué à 2.

    find repert/ -maxdepth 3 -mindepth 3 -type f | \
    awk '
    {
      sub("/[^/]+$","");
      n[$0]++;
    }
    END{
      if(NR){
       for(k in n){
        s=s","n[k];
       }
      }
      sub("^,","",s);
      print s;
    }
    '

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.