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 Uld (site web personnel) . Évalué à 2.
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 Ellendhel (site web personnel) . Évalué à 4.
Sinon, il te reste à écrire un script basé sur les commandes ls et wc qui parcourera l'arborescence.
# avec find et wc
Posté par LaBienPensanceMaTuer . Évalué à 4.
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 liberforce (site web personnel) . Évalué à 4.
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...
[^] # Re: man find
Posté par liberforce (site web personnel) . Évalué à 1.
# facile
Posté par Julien Gilbert . Évalué à 4.
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 fearan . Évalué à 2.
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
# Find et Awk
Posté par Jacques L'helgoualc'h (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.