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

143

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

aux seins nus
la source

Réponses:

224

Peut être quelque chose comme

find . -type f | wc -l

ferait l'affaire. Essayez la commande à partir du dossier parent.

Sagarchalise
la source
3
La solution échouera sur les fichiers dont le nom contient une nouvelle ligne.
utilisateur inconnu
2
@utilisateur inconnu:find . -type f -ls | wc -l
arranger
1
encore plus vite:find . -type f -print0 | tr -d -c '\0' | wc -c
arranger
13
@arrange: encore plus vite: find . -type f -printf . | wc -c- J'adopte l'impression de ma solution au lieu de mon écho -exec.
utilisateur inconnu
1
cette commande a fonctionné comme un charme dans mon cas, ressemble à de la magie noire
pcko1
27

Utilisez la treecommande. Vous devrez peut-être installer le treepackage.

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

Egil
la source
14

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 ceux sans extension) de manière récursive à partir de la racine du répertoire en cours, utilisez:

ls -lR | grep ^- | wc -l
utilisateur38537
la source
1
Ceux-ci ne compteront pas les fichiers cachés.
utilisateur inconnu
Vrai. Je suis plus enclin à accepter et à utiliser votre réponse comme solution.
user38537 le
13

Le moyen le plus rapide et le plus simple consiste à utiliser tree. Sa vitesse est limitée par votre terminal de sortie. Ainsi, si vous transmettez 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 l' -Loption. Pour une 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 .

not2qubit
la source
9
find -type f -printf . | wc -c

Ne comptez pas les lignes de sortie de find, car les noms de fichiers contenant 99 sauts à la ligne compteront pour 100 fichiers.

Utilisateur inconnu
la source
4
Les noms de fichiers contenant de nouvelles lignes constituent un cas extrêmement rare.
DisgruntledGoat
8
@DisgruntledGoat: Donc, une erreur sera extrêmement difficile à trouver.
utilisateur inconnu
J'aime un bon cas, surtout plusieurs années plus tard.
user38537
3

Utilisez cette commande pour chaque dossier du chemin.

for D in *; do echo $D; find $D -type f| wc -l; done
Sriram Murali
la source
1

find semble être plus rapide que l'arbre, j'ai donc utilisé ci-dessous pour compter les fichiers dans chaque répertoire du répertoire de travail actuel (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

Mike Bounds
la source
Analyser la sortie de lsest une très mauvaise idée.
Souravc
Excellent code, comment puis-je organiser les lignes de sortie en un nombre croissant ou décroissant de fichiers
nightcrawler
0

Vous pouvez utiliser find . | wc -l

find .listera tous les fichiers et dossiers et leur contenu commençant dans votre dossier actuel.
wc -lcompte les résultats de find

david
la source
Cette solution compte également les dossiers, j'ai donné la marque car elle correspondait à mon occasion dans laquelle je ne voulais pas les compter :)
topless
La solution échouera sur les fichiers dont le nom contient une nouvelle ligne.
utilisateur inconnu
0

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

ls -alR | grep -c ^ -

Charles
la source
3
S'il vous plaît ajouter quelques détails ...
Pierre.Vriens