web-dev-qa-db-fra.com

Comment rechercher et supprimer des fichiers antérieurs à certains jours sous Unix?

J'ai un dossier pour le journal avec 7 dossiers. Ces sept dossiers contiennent également des sous-dossiers et ces sous-dossiers contiennent également des sous-dossiers. Je veux supprimer tous les fichiers de plus de 15 jours dans tous les dossiers, y compris les sous-dossiers sans toucher à la structure des dossiers, c'est-à-dire uniquement les fichiers.

mahesh@inl00720:/var/dtpdev/tmp/ > ls
A1  A2  A3  A4  A5  A6  A7

mahesh@inl00720:/var/dtpdev/tmp/A1/ > ls
B1 B2 B3 B4 file1.txt file2.csv
40
gtaware

Vous pouvez commencer par dire find /var/dtpdev/tmp/ -type f -mtime +15. Cela trouvera tous les fichiers de plus de 15 jours et imprimera leurs noms. Vous pouvez éventuellement spécifier -print à la fin de la commande, mais c'est l'action par défaut. Il est conseillé d'exécuter d'abord la commande ci-dessus, pour voir quels fichiers sont sélectionnés.

Après avoir vérifié que la commande find répertorie les fichiers que vous souhaitez supprimer (et aucun autre), vous pouvez ajouter une "action" pour supprimer les fichiers. Les actions typiques pour ce faire sont:

  1. -exec rm -f {} \; (ou équivalent, -exec rm -f {} ';')
    Cela s'exécutera rm -f sur chaque fichier; par exemple.,

    rm -f /var/dtpdev/tmp/A1/B1; rm -f /var/dtpdev/tmp/A1/B2; rm -f /var/dtpdev/tmp/A1/B3; …
    
  2. -exec rm -f {} +
    Cela s'exécutera rm -f sur plusieurs fichiers à la fois; par exemple.,

    rm -f /var/dtpdev/tmp/A1/B1 /var/dtpdev/tmp/A1/B2 /var/dtpdev/tmp/A1/B3 …
    

    il peut donc être légèrement plus rapide que l'option 1. (Il peut être nécessaire d'exécuter rm -f plusieurs fois si vous avez des milliers de fichiers.)

  3. -delete
    Ceci indique à find de supprimer les fichiers sans exécuter rm. Cela peut être infiniment plus rapide que le -exec variantes, mais cela ne fonctionnera pas sur tous les systèmes.

Donc, si vous utilisez l'option 2, la commande entière serait:

find /var/dtpdev/tmp/ -type f -mtime +15 -exec rm -f {} +
59
Jan