Je dois rechercher tous les fichiers de plus de X jours et les supprimer localement, ainsi que dans mon compartiment s3. Le problème est que la commande find me renvoie aussi le chemin complet et le nom du fichier. J'ai essayé de jouer avec Basename et quelques autres choses, mais je ne pouvais pas le faire fonctionner. Toute aide serait grandement appréciée.
Pour le moment, la partie "supprimer localement" est ls au lieu de rm pendant que je jouais avec. Pour le rm j'ai besoin du chemin complet.
J'ai besoin de se déshabiller / home / ec2-user / backups / sur les appels s3cmd.
$ find /home/ec2-user/backups -type f -mtime +3 -exec ls {} \; -exec s3cmd del s3://kisnardonline/{} \;
/home/ec2-user/backups/FILESYSTEM-2016-04-09_00-00.tar.gz
File s3://kisnardonline//home/ec2-user/backups/FILESYSTEM-2016-04-09_00-00.tar.gz deleted
rm full-path-and-filename
?Réponses:
Cela peut être fait de plusieurs manières. La combinaison de
find -print0
etxargs -0
est puissant et sûr de travailler en combinaison avecsed -z
(en utilisant NULL comme séparateur de ligne):Puisque
s3cmd
ne prend pas (encore) en charge la suppression de plusieurs fichiers,xargs
a besoin-n 1
pour limiter l'exécution à une ligne à la fois.Une autre façon, peut-être plus simple, consiste à diriger
find
à traversread
et utilisez la substitution de variable bash:la source
Essayez cette modification simple:cd /home/ec2-user/backups/; find -type f -mtime +3 -exec ls {} \; -exec s3cmd del s3://kisnardonline/{} \;
Ainsi tous les chemins retournés par
find
est relative à/home/ec2-user/backups/
et commence par./
. Cela fonctionnera sis3cmd
et / ou le serveur s3 est assez intelligent pour interpréter./
comme il se doit (c.-à-d.s3://foo/./bar
est égal às3://foo/bar
etc.).Dans ce cas:
la source