GNU/Linux >> Tutoriels Linux >  >> Linux

Un moyen rapide de compter les fichiers de manière récursive sous Linux

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'

Linux
  1. Comment augmenter la limite du nombre de fichiers ouverts sous Linux

  2. Quelle est la meilleure façon de compter le nombre de fichiers dans un répertoire ?

  3. Nombre maximum de fichiers/répertoires sous Linux ?

  4. Comptage récursif des fichiers dans un répertoire Linux

  5. Copie récursive de fichiers cachés - Linux

Comment copier un grand nombre de fichiers sous Linux

Le moyen le plus rapide de compter les fichiers de manière récursive sous Linux

Comment lister les fichiers de manière récursive sous Linux

Comment compter les fichiers dans le répertoire sous Linux

Compter le nombre de fichiers dans un répertoire sous Linux

Comment compter le nombre de fichiers dans un répertoire sous Linux