Si vous essayez de supprimer un très grand nombre de fichiers à la fois (j'ai supprimé un répertoire avec 485 000+ aujourd'hui), vous rencontrerez probablement cette erreur:
/bin/rm: Argument list too long.
Le problème est que lorsque vous tapez quelque chose comme rm -rf *
, le *
est remplacé par une liste de tous les fichiers correspondants, comme «rm -rf fichier1 fichier2 fichier3 fichier4» et ainsi de suite. Il y a un tampon de mémoire relativement petit alloué au stockage de cette liste d'arguments et s'il est rempli, le shell n'exécutera pas le programme.
Pour contourner ce problème, beaucoup de gens utiliseront la commande find pour trouver chaque fichier et les passeront un par un à la commande "rm" comme ceci:
find . -type f -exec rm -v {} \;
Mon problème est que j'avais besoin de supprimer 500 000 fichiers et cela prenait beaucoup trop de temps.
Je suis tombé sur un moyen beaucoup plus rapide de supprimer des fichiers - la commande "find" a un indicateur "-delete" intégré! Voici ce que j'ai fini par utiliser:
find . -type f -delete
En utilisant cette méthode, je supprimais des fichiers à une vitesse d'environ 2000 fichiers / seconde - beaucoup plus rapidement!
Vous pouvez également afficher les noms de fichiers lorsque vous les supprimez:
find . -type f -print -delete
… Ou même montrer combien de fichiers seront supprimés, puis le temps nécessaire pour les supprimer:
root@devel# ls -1 | wc -l && time find . -type f -delete
100000
real 0m3.660s
user 0m0.036s
sys 0m0.552s