163 votes

Comptage rapide des fichiers Linux pour un grand nombre de fichiers

J'essaie de trouver la meilleure façon de trouver le nombre de fichiers dans un répertoire particulier lorsqu'il y a un très grand nombre de fichiers ( > 100 000).

Lorsqu'il y a autant de fichiers, l'exécution de "ls | wc -l" prend un temps assez long. Je pense que c'est parce qu'il renvoie les noms de tous les fichiers. J'essaie d'utiliser le moins d'entrées-sorties possible sur le disque.

J'ai expérimenté avec quelques scripts shell et Perl, sans succès. Avez-vous des idées ?

4voto

Benubird Points 2337

J'ajoute juste ceci par souci d'exhaustivité. La réponse correcte a bien sûr déjà été postée par quelqu'un d'autre, mais vous pouvez également obtenir un compte des fichiers et des répertoires avec le programme tree.

Exécutez la commande tree | tail -n 1 pour obtenir la dernière ligne, qui dira quelque chose comme "763 répertoires, 9290 fichiers". Ceci compte les fichiers et les dossiers de manière récursive, en excluant les fichiers cachés, qui peuvent être ajoutés avec le drapeau -a . À titre de référence, il a fallu 4,8 secondes à l'arbre de mon ordinateur pour compter l'ensemble de mon répertoire personnel, soit 24777 répertoires et 238680 fichiers. find -type f | wc -l a mis 5,3 secondes, soit une demi-seconde de plus, donc je pense que l'arbre est assez compétitif en termes de vitesse.

Tant que vous n'avez pas de sous-dossiers, l'arbre est un moyen rapide et facile de compter les fichiers.

De plus, et uniquement pour le plaisir, vous pouvez utiliser tree | grep '^├' pour n'afficher que les fichiers/dossiers du répertoire courant - c'est en fait une version beaucoup plus lente de ls .

2voto

Vous pouvez essayer d'utiliser opendir() y readdir() en Perl est plus rapide. Pour un exemple de ces fonctions, regardez aquí

-4voto

user2546874 Points 11

Les 10 premiers directeurs ayant le plus grand nombre de dossiers.

dir=/ ; for i in $(ls -1 ${dir} | sort -n) ; { echo "$(find ${dir}${i} -type f | wc -l) => $i," ; } | sort -nr | head -10

Prograide.com

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.

Powered by:

X