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.