find … -exec rm {} \;
exécute le rm
commande pour chaque fichier. Même si le démarrage d'un nouveau processus est assez rapide, c'est toujours beaucoup plus lent que le simple fait de supprimer un fichier.
find … -exec rm {} +
appellerait rm
par lots, ce qui est beaucoup plus rapide :vous payez le coût d'exécution de rm
une fois par lot, et chaque lot effectue de nombreuses suppressions.
Encore plus rapide est de ne pas invoquer rm
du tout. Le find
la commande sous Linux a une action -delete
pour supprimer un fichier correspondant.
find ./cache -type f -mtime +0.5 -delete
Cependant, si vous produisez des fichiers à un rythme tel que find … -exec rm {} \;
ne peut pas suivre, il y a probablement quelque chose qui ne va pas avec votre configuration. Si cache
contient des millions de fichiers, vous devez le diviser en sous-répertoires pour un accès plus rapide.
Essayez d'utiliser xargs
:
find ./cache -mtime +0.5 -print0 | xargs -0 rm -f
Mettre à jour l'explication pour @pradeepchhetri
Si vous utilisez find
avec -exec
, chaque fichier find
trouvé appellera rm
une fois. Donc, si vous avez trouvé un grand nombre de fichiers, c'est-à-dire 10 000 fichiers, vous avez appelé rm
10000 fois.
xargs
traitera la sortie de find
comme argument de commande à rm
, de sorte que xargs fournira autant d'arguments que rm
peut gérer à la fois, c'est-à-dire rm -f file1 file2 ...
Ainsi, il fait moins d'appels de fourche, rend le programme exécuté plus rapidement.