Commande Linux find - comment trouver des répertoires par taille?
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
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?