Vous transmettez en fait rm
la sortie de find
. Ce que vous voulez, c'est utiliser la sortie de find
comme arguments pour rm
:
find -type f -name '*.sql' -mtime +15 | xargs rm
xargs
est la commande qui "convertit" son entrée standard en arguments d'un autre programme, ou, comme ils le mettent plus précisément sur la man
page,
construire et exécuter des lignes de commande à partir d'une entrée standard
Notez que si les noms de fichiers peuvent contenir des espaces, vous devez corriger cela:
find -type f -name '*.sql' -mtime +15 -print0 | xargs -0 rm
Mais en fait, find
a un raccourci pour cela: l' -delete
option:
find -type f -name '*.sql' -mtime +15 -delete
Veuillez tenir compte des avertissements suivants dans man find
:
Warnings: Don't forget that the find command line is evaluated
as an expression, so putting -delete first will make find try to
delete everything below the starting points you specified. When
testing a find command line that you later intend to use with
-delete, you should explicitly specify -depth in order to avoid
later surprises. Because -delete implies -depth, you cannot
usefully use -prune and -delete together.
PS Notez que le transfert direct vers rm
n'est pas une option, car rm
ne s'attend pas à des noms de fichiers sur l'entrée standard. Ce que vous faites actuellement, c'est de les faire reculer.