Commande Linux find - comment trouver des répertoires par taille?

Sep 02 2020

Peut-il findrenvoyer des résultats en fonction de la taille des répertoires?
La commande ci-dessous fonctionne bien comme prévu -

find * -type f -size +10M -exec ls -hlSr {} \+

Mais en appliquant la même chose aux répertoires, il ne renvoie aucun résultat

find * -type d -size +10M -exec ls -hlSr {} \+   //no output

Je veux donc savoir si une variation de ci-dessus est possible.

Je sais que cela dupeut être utilisé comme ceci -> du -hs * | sort -hpour obtenir le résultat souhaité, mais je suis plus intéressé par la compréhension des findlimitations et des scénarios d'utilisation.

Réponses

2 pLumo Sep 02 2020 at 09:07

Cela est attendu.

find -sizevérifie uniquement la taille de l'inode (rappelez-vous, les répertoires ne sont également que des "fichiers"), pas le contenu du répertoire. Pour les répertoires, ce ne sera jamais plus de 10M, donc le findrésultat sera simplement vide.

La taille de l'inode est la même que vous obtenez lorsque vous exécutez stat:

$ du -s dir 61943836851 dir $ stat -c %s dir
53248

Donc ce n'est pas possible avec tout findseul.
Mais vous pouvez bien sûr utiliser find . -type d -exec du -hs {} +pour pouvoir utiliser findles options de filtre de.


Lectures complémentaires:

  • Pourquoi le rapport de taille des répertoires est-il différent des autres fichiers?
  • Que signifie la taille d'un répertoire dans la sortie de la commande 'ls -l'?
  • Pourquoi la taille d'un répertoire est-elle 0 ou 4096?