Comment puis-je compter récursivement les fichiers dans un répertoire Linux ?
J'ai trouvé ça :
find DIR_NAME -type f ¦ wc -l
Mais lorsque je l'exécute, il renvoie l'erreur suivante.
find : les chemins doivent précéder l'expression : ¦
Comment puis-je compter récursivement les fichiers dans un répertoire Linux ?
J'ai trouvé ça :
find DIR_NAME -type f ¦ wc -l
Mais lorsque je l'exécute, il renvoie l'erreur suivante.
find : les chemins doivent précéder l'expression : ¦
Puisque les noms de fichiers sous UNIX peuvent contenir des nouvelles lignes (oui, des nouvelles lignes), wc -l
pourrait compter trop de fichiers. J'imprimerais un point pour chaque fichier, puis je compterais les points :
find DIR_NAME -type f -printf "." | wc -c
Note : Le -printf
L'option ne fonctionne qu'avec find de GNU findutils. Vous devrez peut-être l'installer, sur un Mac par exemple.
En combinant plusieurs des réponses données ici, la solution la plus utile semble être la suivante :
find . -maxdepth 1 -type d -print0 |
xargs -0 -I {} sh -c 'echo -e $(find "{}" -printf "\n" | wc -l) "{}"' |
sort -n
Il peut gérer des choses bizarres comme les noms de fichiers qui incluent des espaces, des parenthèses et même des nouvelles lignes. Il trie également la sortie par le nombre de fichiers.
Vous pouvez augmenter le nombre après -maxdepth
pour que les sous-répertoires soient également comptabilisés. Gardez à l'esprit que cela peut potentiellement prendre beaucoup de temps, en particulier si vous avez une structure de répertoires très imbriqués en combinaison avec un taux élevé de -maxdepth
numéro.
Si vous voulez savoir combien de fichiers et de sous-répertoires existent à partir du répertoire de travail actuel, vous pouvez utiliser cette ligne simple
find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo -e $(find {} | wc -l) {}' | sort -n
Cela fonctionnera à la sauce GNU, et il suffit d'omettre le -e de la commande echo pour BSD linux (par exemple OSX).
Si ce dont vous avez besoin est de compter un type de fichier spécifique récursivement que vous pouvez faire :
find YOUR_PATH -name '*.html' -type f | wc -l
-l
est juste pour afficher le nombre de lignes dans la sortie.
Si vous devez exclure certains dossiers, utilisez la fonction -not -path
find . -not -path './node_modules/*' -name '*.js' -type f | wc -l
Vous pouvez utiliser la commande ncdu
. Il comptera récursivement le nombre de fichiers qu'un répertoire Linux contient. Voici un exemple de sortie :
Il dispose d'une barre de progression, ce qui est pratique si vous avez de nombreux fichiers :
Pour l'installer sur Ubuntu :
sudo apt-get install -y ncdu
Benchmark : J'ai utilisé https://archive.org/details/cv_corpus_v1.tar (380390 fichiers, 11 GB) comme le dossier où l'on doit compter le nombre de fichiers.
find . -type f | wc -l
: environ 1m20s pour terminerncdu
: environ 1m20s pour terminer Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
91 votes
Vous confondez la barre cassée
¦
(ASCII 166) avec la barre verticale|
(ASCII 124) utilisé pour Pipeline UNIX .12 votes
@SkippyleGrandGourou Ça ne s'appelle pas un tuyau ?
38 votes
DaveStephens Oui, on l'appelle aussi comme ça. On l'appelle aussi trait de Sheffer, verti-bar, vbar, bâton, ligne verticale, barre verticale, barre, obélisque, glidus.
83 votes
@zenith Je l'appelle simplement Bob.
28 votes
Dans la RFC20, il est appelé "ligne verticale". "Pipe" est le nom de l'opérateur shell, plutôt que le nom du symbole. Tout comme
*
est le caractère ASCII "astérisque", mais "times" dans certains autres contextes.0 votes
@slim C'est de loin la réponse la plus utile. De loin, et même plus.