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.