Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

nombre de fichiers dans un répétoire

4 réponses
Avatar
Stan
Bonjour,

quelle est la manière canonnique
de connaître le nombre de fichiers
dans un répertoire de façon récursive ( avec les sous rep) ?

Merci.

--
-Stan

4 réponses

Avatar
Matthieu Moy
"Stan" writes:

Bonjour,

quelle est la manière canonnique
de connaître le nombre de fichiers
dans un répertoire de façon récursive ( avec les sous rep) ?


Canonique, je ne sais pas, mais

$ find . | wc -l

te donnes une bonne approximation (mais si un mon de fichier contient
un retour à la ligne, tu es cuit). Cette version compte les
répertoires, si tu ne veux que les fichiers :

$ find . -type f | wc -l

--
Matthieu

Avatar
Luc.Habert.00__arjf
Matthieu Moy :

$ find . | wc -l

te donnes une bonne approximation (mais si un mon de fichier contient
un retour à la ligne, tu es cuit).


{ find . -exec sh -c ploum 'echo "$#" +' '{}' '+'; echo 0; } | bc

Avatar
Stan
"Luc Habert" a écrit dans le message de
news:f024of$2nqh$
Matthieu Moy :

$ find . | wc -l

te donnes une bonne approximation (mais si un mon de fichier contient
un retour à la ligne, tu es cuit).


{ find . -exec sh -c ploum 'echo "$#" +' '{}' '+'; echo 0; } | bc


J'utilise : ls -R | awk ' {i++} END{print i}' , mais le pb
c'est lorsque ls n'a pas les droits de lecture, j'obtiens des
messages inutiles.

--
-Stan


Avatar
Stephane Chazelas
2007-04-17, 11:33(+02), Matthieu Moy:
"Stan" writes:
[...]

quelle est la manière canonnique
de connaître le nombre de fichiers
dans un répertoire de façon récursive ( avec les sous rep) ?


Canonique, je ne sais pas, mais

$ find . | wc -l


Ca ne compte qu'un seul "." et aucun ".." cela dit.

Tu peux faire:

find .//. ! -name . -print | grep -c //

Pour ne compter aucun "." ni ".." et la ruse du // evite les
problemes avec les noms de fichier qui contiennent des sauts de
ligne.

Avec zsh:

files=(**/*(DN))
print $#files

(ne compte ni "." ni ".." non plus).

Si on n'est pas interessé par la liste des fichiers, on peut
toujour faire:

n=0
**/*(DNe:'((n++,0))':)
print $n

qui sera beaucoup plus rapide.

--
Stéphane