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


Réponses:


224

Peut être quelque chose comme

find . -type f | wc -l

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


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.


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

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 .


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.


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

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


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


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.