Lors de la suppression de plusieurs fichiers en une fois sur un de mes serveurs, j’ai été confronté à un problème.
Le message d’erreur Argument list too long s’est affiché lors que j’ai voulu supprimer un grand nombre de fichier de session obsolète PHP.
Ce message d’erreur vient du fait que la limite de la CLI a été atteinte (sachant que l’étoile dans la commande prend chaque fichier).
Quand un dossier contient plusieurs millions de fichiers, le kernel Linux arrête la commande car la commande est trop long.
Quand un dossier contient plusieurs millions de fichiers, le kernel Linux arrête la commande car la commande est trop long.
Ce problème peut également se présenter sur d’autres commandes fonctionnant comme cp, comme par exemple cp, mv, etc
La solution pour contourner ce problème est de passer par la commande find et xargs.
La commande find permet de trouver tous les fichiers dans un certains emplacement, et xargs permet de chaîner des commandes qui prennent des arguments en entrée.
La commande ci-dessous est donc à saisir:
Important: Aucune confirmation ne sera demandée pour supprimer des fichiers ou des dossiers.
Soyez-sûr de ce que vous faîtes, quitte à faire un « echo » au lieu de la commande « rm ».
Soyez-sûr de ce que vous faîtes, quitte à faire un « echo » au lieu de la commande « rm ».
sudo find EMPLACEMENT -name 'PATTERNE' | sudo xargs rm
EMPLACEMENT est l’emplacement du dossier ou chercher, comme par exemple /var/log/
PATTERNE correspond au patterne à chercher et prendre les fichiers à supprimer, comme par exemple *.log
Les erreurs seront affichés dans le terminal ou dans la session SSH actuellement étable.