Lorsque le nombre de fichiers dans un répertoire dépasse les 30000, cela peut constituer un problème.
Lorsque le nombre de fichiers dans un répertoire dépasse les 30000, cela peut constituer un problème.
J’ai rencontré cette petite erreur avec des répertoires contenant des millions de fichiers, qu’on vous demande de lister/supprimer, voici la solution la plus rapide.
find /chemin/repertoire -type f -name '*.log' | xargs rm -f
ou
find /chemin/repertoire -type f -name '*.log' -delete
ou encore :
find /chemin/repertoire -type f -name '*.log' -exec rm -rf {};
Pour effacer tout le contenu d’un répertoire en épargnant un fichier:
cd repertoire
find . -maxdepth 1 -not -name fichier_a_conserver -exec rm -rf ‘{}’ \;
Pou effacer tout le contenu d’un dossier sauf les fichiers jpg:
cd dossier
find . -maxdepth 1 -not -name *.jpg -exec rm -rf ‘{}’ \;
Pour supprimer tous les fichiers « .db » a partir du répertoire courant:
find . -type f -name "*db" -exec rm -f {} \;
Pour supprimer tous les fichiers « .db » à partir de la racine en demandant une confirmation:
find . -type f -name "*.db" -exec rm -i {} \;
Pour supprimer tous les repertoires se terminant par « db » à partir du répertoire courant:
find . -type d -name "*db" -exec rm -rf {} \;
Quand vous tombez sur un fichier commençant par un tiret, si vous vous voulez le déplacer, le renommer ou le supprimer, il vous est impossible de le faire car celui-ci sera considérer comme une option.
Voici trois façon de contourner le problème:
Avec — devant le fichier:
mv -- -fichier
Par le numéro d’inode:
ls -i
find . -inum "n° d'inode'" -exec mv {} nouveau_nom \;
Avec ./ devant le fichier:
mv ./--help toto