J'ai trouvé la commande pour supprimer des fichiers de plus de 5 jours dans un dossier
find /path/to/files* -mtime +5 -exec rm {} \;
Mais comment puis-je aussi le faire pour les sous-répertoires de ce dossier?
files
find
rm
timestamps
Teddy291
la source
la source
find /path/to -type d -empty -delete
rm test one
. (Ce qui supprimera un fichier appelé "test" et un fichier appelé "un", mais pas un fichier appelé "test un"). Astuce: -delete ou -print0find
pour éviter les problèmes de caractères spéciaux, comme indiqué à la première ligne de la réponse. Exemple:find /path/to/files/ -exec somecommand '{}' \;
Réponses:
Soyez prudent avec les noms de fichiers spéciaux (espaces, guillemets) lorsque vous effectuez un transfert vers rm.
Il existe une alternative sûre - l' option -delete :
C'est ça, pas d'appel séparé et vous n'avez pas à vous soucier des noms de fichiers.
Remplacez
-delete
par-depth -print
pour tester cette commande avant de l'exécuter (-delete
implique-depth
).la source
-type f
de supprimer des fichiers uniquement (et de conserver les sous-répertoires)find /path/to/dir\ with\ spaces/ -mindepth 1 -mtime +5 -delete
?find
argument est un filtre qui utilise le résultat du filtre précédent en entrée. Donc, assurez-vous d’ajouter le -delete comme dernier argument. IE:find . -delete -mtime +5
effacera TOUT dans le chemin actuel.Notez que cette commande ne fonctionnera pas si elle trouve trop de fichiers. Cela produira une erreur comme:
Cela signifie que la limite de l'appel système exec sur la longueur d'une ligne de commande a été dépassée. Au lieu d'exécuter rm de cette façon, il est beaucoup plus efficace d'utiliser xargs . Voici un exemple qui fonctionne:
Cela supprimera tous les fichiers (type f) modifiés il y a plus de 14 jours sous / root / Maildir / à partir de là et plus profondément (mindepth 1). Voir le manuel de recherche pour plus d'options .
la source
find /root/Maildir/ -mindepth 1 -type f -mtime +14 -print0 | xargs -r0 rm --
C'est le même. Vous devez simplement fournir le répertoire parent plutôt que le préfixe des fichiers. Dans votre exemple, ce serait:
Cela supprimera tous les fichiers de moins de 5 jours qui se trouvent dans
/path/to
et ses sous-répertoires.Pour supprimer les sous-répertoires vides, reportez-vous au commentaire @Costas ci-dessus.
la source
+
dans ce cas. - 2) mieux écrire-exec rm '{}' +
pour combattre le mal des fichiers avec des caractères spéciaux (espaces, nouvelles lignes, etc.) dans leur nom.la source