GNU/Linux >> Tutoriels Linux >  >> Linux

du qui compte le nombre de fichiers/répertoires plutôt que leur taille

J'ai trouvé du --inodes utile, mais je ne sais pas quelle version de du cela requiert. Sur Ubuntu 17.10, les opérations suivantes :

du --inodes      # all files and subdirectories
du --inodes -s   # summary
du --inodes -d 2 # depth 2 at most

Combiner avec | sort -nr pour trier par ordre décroissant du nombre d'inodes contenants.


Le moyen le plus simple semble être find /path/to/search -ls | wc -l

Find est utilisé pour parcourir tous les fichiers et dossiers.
-ls pour lister (imprimer) tous les noms. Il s'agit d'une valeur par défaut et si vous l'omettez, cela fonctionnera toujours de la même manière sur presque tous les systèmes. (Presque, car certains peuvent avoir des valeurs par défaut différentes). C'est une bonne habitude de l'utiliser explicitement.

Si vous utilisez simplement le find /path/to/search -ls partie, il imprimera tous les fichiers et répertoires sur votre écran.


wc est le nombre de mots. le -l option lui dit de compter le nombre de lignes.

Vous pouvez l'utiliser de plusieurs manières, par exemple

  • fichier de test wc
  • fichier de test cat | toilettes

La première option permet à wc d'ouvrir un fichier et de compter le nombre de lignes, de mots et de caractères dans ce fichier. La deuxième option fait la même chose mais sans nom de fichier, elle lit à partir de stdin.


Vous pouvez combiner des commandes avec un tube | . La sortie de la première commande sera redirigée vers l'entrée de la deuxième commande. Ainsi find /path/to/search -ls | wc -l utilise find pour répertorier tous les fichiers et répertoires et envoie la sortie à wc. Wc compte ensuite le nombre de lignes.

(Une autre alternative aurait été `ls | wc', mais find est beaucoup plus flexible et un bon outil pour apprendre.)

[Modifier après commentaire]

Il peut être utile de combiner la recherche et l'exécution.

Par exemple. find / -type d ! \( -path proc -o -path dev -o -path .snap \) -maxdepth 1 -exec echo starting a find to count to files in in {} \; listera tous les répertoires dans /, à l'exception de ceux que vous ne souhaitez pas rechercher. Nous pouvons déclencher la commande précédente sur chacun d'eux, donnant une somme de fichiers par dossier dans /.

Cependant :

  1. Cela utilise l'extension spécifique GNU -maxdepth.
    Cela fonctionnera sur Linux, mais pas sur n'importe quel Unix-a-alike.
  2. Je suppose que vous pourriez en fait vouloir un certain nombre de fichiers pour chaque sous-répertoire.

Le script PHP suivant fait l'affaire.

#!/usr/bin/php
<?php 

function do_scan($dir, $dev) {
  $total = 1;

  if (\filetype($dir) === 'dir' && \lstat($dir)['dev'] == $dev) {
    foreach (\scandir($dir) as $file) {
      if ($file !== '.' && $file !== '..') {
        $total += do_scan($dir . \DIRECTORY_SEPARATOR . $file, $dev);
      }
    }

    print "$total\t$dir\n";
  }

  return $total;
};

foreach (\array_slice($argv, 1) as $arg) {
  do_scan($arg, \lstat($arg)['dev']);
}

Mettez cela dans un fichier (par exemple, "treesize "), chmod +x et exécutez-le avec ./treesize . | sort -rn | less .


Linux
  1. Comment trouver le nombre de fichiers dans un répertoire et des sous-répertoires

  2. Trouver des fichiers et des répertoires sous Linux comme un pro

  3. Comment trouver des fichiers plus gros ou plus petits que la taille X sous Linux

  4. Trouvez les fichiers et répertoires les plus volumineux sous Linux

  5. Comment rechercher des fichiers par taille et extension ?

Rechercher la commande sous Linux (Rechercher des fichiers et des répertoires)

Trouvez facilement des fichiers et des répertoires sur Linux

Trouver les plus gros fichiers ou répertoires ?

Afficher tous les fichiers ".sh" d'une taille supérieure à 5 ko ?

Comment trouver tous les fichiers de plus de 1 Go sous Linux ?

comment utiliser du pour voir les fichiers supérieurs à une taille de seuil