8 votes

os x terminal -remove files older than x days

J'essaie de créer un scripts qui supprime les fichiers de plus de X jours. Cela semblait assez simple mais tous les fichiers semblent être supprimés ?

find /Volumes/Groups/Projects/530_BFAMI/test/ -ctime +30 -print -exec rm {} \;

Toutes les idées sont les bienvenues !

Il serait également utile d'imprimer les informations relatives aux fichiers pour les correspondances, car mes dates sont peut-être trompeuses dans le moteur de recherche ?

16voto

jm666 Points 7802

Ne jamais suggérer -exec rm ... .

rm est tout simplement trop dangereux. Il faut toujours commencer par des essais à blanc. Il est préférable d'utiliser cette méthode :

find /Volumes/Groups/Projects/530_BFAMI/test/ -ctime +30 -print0 | xargs -0 -n1

Ceci montrera la marche à blanc et seulement lorsque vous serez satisfait, vous pourrez ajouter la fonction rm jusqu'au bout

find /Volumes/Groups/Projects/530_BFAMI/test/ -ctime +30 -print0 | xargs -0 rm

Si vous commencez à utiliser ce piped to xargs vous pouvez toujours ajouter d'autres filtres, comme par exemple :

find /some/where -mtime +3d -print0 | grep -ziE '\.(jpg|png|gif)$' | xargs -0 rm

et d'autres combinaisons similaires (plus puissantes).

2voto

Pour répondre à la question posée dans votre commentaire : Vous pouvez relier des critères distincts en les énumérant l'un après l'autre. Si vous préférez, vous pouvez utiliser -a o -and entre eux, mais ils sont redondants. Vous pouvez également utiliser -o o -or pour l'opérateur OR, et vous pouvez utiliser des parenthèses - qui doivent être mises entre guillemets pour les protéger de l'interpréteur de commandes, comme dans \( y \) pour le regroupement.

Pour plus d'informations, cliquez ici : man find

2voto

Awaterujin Points 164

Il est considéré comme dangereux d'utiliser -exec rm sans avoir au préalable effectué ls. Vous devriez probablement vérifier cela d'abord. La vérification inverse est également un bon indice pour vous indiquer si votre timing est correct.

find . -maxdepth 1 -type f -mtime -30d -exec ls -latr {} \;

OU

find . -maxdepth 1 -type f -atime -30d -exec ls -latr {} \;
  1. Limitez le résultat de votre recherche. Assurez-vous de ce que vous demandez explicitement.
  2. Comparez pour voir si le résultat opposé est ce qui a été exclu de votre commande initiale.
  3. Probablement -mtime o -atime sont plus appropriés, mais là encore, comparez les résultats et voyez s'ils correspondent à vos besoins.

1voto

Igbanam Points 123

Essayez ceci : find . -ctime +30 | xargs rm -r 2> /dev/null

Pour une raison ou une autre, ce message s'exécute deux fois. Je me contente donc de rediriger les erreurs vers le trou noir /dev/null

Appréciez.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X