2009-09-15 7 views
5
# find /home/shantanu -name 'my_stops*' | xargs ls -lt | head -2 

La commande mentionnée ci-dessus répertorie les deux derniers fichiers ayant my_stops dans son nom. Je veux garder ces 2 fichiers. Mais je veux supprimer tous les autres fichiers commençant par "my_stops" du répertoire courant.Supprimer les anciens fichiers de sauvegarde

Répondre

13

Si vous créez des sauvegardes sur une base régulière, il peut être utile d'utiliser l'option -atime de trouver des fichiers si seulement que vos anciens deux dernières sauvegardes peuvent être sélectionnées pour la suppression .

Pour les sauvegardes quotidiennes, vous pouvez utiliser

$ find /home/shantanu -atime +2 -name 'my_stops*' -exec rm {} \; 

mais une expression différente (autre que -atime) peut vous convenir mieux.

Dans l'exemple, j'ai utilisé +2 pour signifier plus de 2 jours.

+2

« 2 » signifie exactement deux. Si vous voulez "plus vieux que", vous devez utiliser "+2". –

+0

Bon point! oui, utilisez +2 – pavium

+2

Vous ne pouvez pas utiliser "-delete"? – Duke

1

Voir here

(ls -t|head -n 2;ls)|sort|uniq -u|xargs rm

1

qui vous montrera de la deuxième ligne en avant;)

find/home/Shantanu -name 'my_stops *' | xargs ls -lt | tail -n 2

Gardez à l'esprit que trouver est récursive;)

+0

Vous pouvez utiliser '-maxdepth' pour contrôler la récursivité. –

4

Voici une solution non récurrente:

ls -t my_stops* | awk 'NR>2 {system("rm \"" $0 "\"")}' 

Explication:

  • Les ls listes de commandes La commande awk indique que pour les lignes (NR = nombre d'enregistrements, ie lignes) supérieures à 2, supprimez-les
  • Les guillemets sont nécessaires au cas où les noms de fichiers ont intégré des espaces
0

Sans approche récursive:

find /home/folder/ -maxdepth 1 -name "*.jpg" -mtime +2 
+0

Pouvez-vous donner quelques commentaires au PO pour expliquer ce que vous faites et pourquoi? – theJollySin

Questions connexes