Question Trouver le nombre de fichiers dans les dossiers et sous-dossiers?


Je veux trouver le nombre total de fichiers sous un dossier et tous ses sous-dossiers.


112
2018-04-08 11:55


origine




Réponses:


Peut-être quelque chose comme

find . -type f | wc -l

ferait le tour. Essayez la commande du dossier parent.


179
2018-04-08 12:06



La solution échouera sur les fichiers dont les noms contiennent une nouvelle ligne. - user unknown
@Utilisateur inconnu: find . -type f -ls | wc -l - arrange
même plus vite: find . -type f -print0 | tr -d -c '\0' | wc -c - arrange
@arrange: encore plus vite: find . -type f -printf . | wc -c - J'adopte l'impression pour ma solution au lieu de mon écho -exec. - user unknown
Sachez que cela compte également les fichiers cachés commençant par un point. Je considère cela comme une fonctionnalité plutôt que comme un bug, mais il est bon de le savoir. - cgogolin


Utilisez le tree commander. Vous devrez peut-être installer le tree paquet.

Il listera tous les fichiers et dossiers sous le dossier donné et listera un résumé à la fin.


22
2018-04-08 12:09





Pour compter les fichiers (même les fichiers sans extension) à la racine du répertoire en cours, utilisez:

ls -l | grep ^- | wc -l

Pour compter les fichiers (même les fichiers sans extension) récursivement à partir de la racine du répertoire en cours, utilisez:

ls -lR | grep ^- | wc -l

10
2017-11-12 20:39





Le moyen le plus rapide et le plus simple est d'utiliser tree. Sa vitesse est limitée par votre terminal de sortie, donc si vous conduisez le résultat à tail -1, vous obtiendrez un résultat immédiat. Vous pouvez également contrôler à quel niveau de répertoire vous aimez les résultats, en utilisant le -L option. Pour sortie colorisée, utilisez -C. Par exemple:

$ tree share/some/directory/ | tail -1
558 directories, 853 files

$ tree -L 2 share/some/directory/ | tail -1
120 directories, 3 files

Si ce n'est pas déjà là, vous pouvez l'obtenir ici.


9
2018-01-15 13:20





find -type f -printf . | wc -c

Ne comptez pas les lignes de sortie de find, car les noms de fichiers, contenant 99 nouvelles lignes, compteront pour 100 fichiers.


4
2018-04-08 14:21



Les noms de fichiers contenant de nouvelles lignes constituent un cas exceptionnel. - DisgruntledGoat
@DisgruntledGoat: Donc, une erreur sera extrêmement difficile à trouver. - user unknown


Utilisez cette commande pour chaque dossier du chemin

for D in *; do echo $D; find $D -type f| wc -l; done

2
2018-03-20 18:02





find semble être plus rapide que tree donc j'ai utilisé ci-dessous pour compter les fichiers dans chaque répertoire du répertoire de travail en cours (en ignorant les fichiers dans CWD) en permettant aux répertoires d'avoir des espaces:

ls -d */ | while read dir_line do echo -n "$dir_line :" find "$dir_line" -type f | wc -l done


1
2017-07-21 09:47



Sortie d'analyse de ls est très mauvaise idée - souravc
Bon code, comment puis-je organiser les lignes de sortie dans un nombre croissant ou décroissant de fichiers? - nightcrawler


Vous pouvez utiliser find . | wc -l

find . répertoriera tous les fichiers et dossiers, ainsi que leur contenu, dans votre dossier actuel.
wc -l compte les résultats de find


0
2018-04-08 12:06



Cette solution compte aussi les dossiers, j'ai donné la marque car elle correspondait à mon occasion que je ne voulais pas les compter :) - topless
La solution échouera sur les fichiers dont les noms contiennent une nouvelle ligne. - user unknown


J'irais avec cette option moi-même:

ls -alR | grep -c ^ -


0
2018-05-29 06:55



S'il vous plaît ajouter des détails ... - Pierre.Vriens