Solution 1 :
Si vous avez ceci sur un système de fichiers dédié, ou si vous avez un nombre constant de fichiers en surcharge, vous pourrez peut-être obtenir un nombre assez approximatif du nombre de fichiers en regardant le nombre d'inodes dans le système de fichiers via " df -i":
[email protected]:~# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 60489728 75885 60413843 1% /
Sur ma boîte de test ci-dessus, j'ai 75 885 inodes alloués. Cependant, ces inodes ne sont pas seulement des fichiers, ce sont aussi des répertoires. Par exemple :
[email protected]:~# mkdir /tmp/foo
[email protected]:~# df -i /tmp
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 60489728 75886 60413842 1% /
[email protected]:~# touch /tmp/bar
[email protected]:~# df -i /tmp
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 60489728 75887 60413841 1% /
REMARQUE :Tous les systèmes de fichiers ne gèrent pas le nombre d'inodes de la même manière. ext2/3/4 fonctionneront tous, cependant btrfs rapporte toujours 0.
Si vous devez différencier les fichiers des répertoires, vous devrez parcourir le système de fichiers et "stat" chacun pour voir s'il s'agit d'un fichier, d'un répertoire, d'un lien symbolique, etc. Le plus gros problème ici n'est pas la canalisation de tout le texte vers "wc", mais en cherchant parmi tous les inodes et entrées de répertoire pour rassembler ces données.
Autre que la table d'inodes indiquée par "df -i", il n'y a vraiment pas de base de données du nombre de fichiers dans un répertoire donné. Cependant, si ces informations sont importantes pour vous, vous pouvez créer et maintenir une telle base de données en demandant à vos programmes d'incrémenter un nombre lorsqu'ils créent un fichier dans ce répertoire et de le décrémenter lorsqu'ils sont supprimés. Si vous ne contrôlez pas les programmes qui les créent, ce n'est pas une option.
Solution 2 :
J'ai écrit un programme de comptage de fichiers personnalisé pour cette question StackOverflow :https://stackoverflow.com/questions/1427032/fast-linux-file-count-for-a-large-number-of-files
Vous pouvez trouver le référentiel GitHub ici si vous souhaitez parcourir, télécharger ou contribuer :https://github.com/ChristopherSchultz/fast-file-count
Solution 3 :
Si vous souhaitez compter de manière récursive le nombre de fichiers dans un répertoire, le localiser La commande est la plus rapide que je connaisse, en supposant que vous ayez une base de données à jour (sudo update database .. faite par défaut via chron job tous les jours). Cependant, vous pouvez accélérer la commande si vous évitez le grep tuyau.
Voir localiser l'homme :
-c, --count
Instead of writing file names on standard output, write the number of
matching entries only.
La commande la plus rapide est donc :
locate -c -r '/path/to/dir'