web-dev-qa-db-fra.com

Supprimer tous les fichiers créés avant une certaine date

J'ai un répertoire contenant un grand nombre de fichiers (comme des journaux pour chaque jour de l'année). Je voudrais supprimer tous les fichiers créés avant disons le 22/11. Comment puis-je y parvenir? Dois-je utiliser find puis exec -rm? J'utilise ksh.

29
user1058398

L'utilisation de find est toujours le moyen préféré de supprimer des fichiers. Voir http://mywiki.wooledge.org/UsingFind pour en savoir plus.

Une façon de procéder consiste à créer un fichier contenant l'horodatage. par exemple

touch -t 201311220000 /tmp/timestamp

Supprimez maintenant les fichiers GNU find (en supposant dans le répertoire courant) qui correspondent à l'horodatage, par exemple:

find . -type f ! -newer /tmp/timestamp -delete  

ou non GNU find

find . -type f ! -newer /tmp/timestamp -exec rm {} \;
35
Valentin Bajrami

Avec GNU ou certains BSD finds:

find . ! -newermt 2013-11-22 ! -type d -delete

Notez qu'il vérifie la dernière heure de modification des fichiers. Sur certains BSD, vous pouvez utiliser -newerBt au lieu de -newermt pour vérifier l'inode du fichier naissance heure si disponible à la place.

27
Stéphane Chazelas
find /path/to/directory/ -mtime +<number of days> -name '<file name>' -exec rm -rf {} \;

exemple:

find /Netap_fileshare_backup/SQL/DB_backups/xeo/ -mtime +15 -name 'ORA_XEO*' -exec rm -rf {} \;

Dans ce cas, tous les fichiers commençant par "ORA_XEO" avec plus de 15 jours seront supprimés.

1
calafate