En realidad, está canalizando rm
la salida a la entrada de find
. Lo que desea es utilizar la salida de find
como argumentos para rm
:
find -type f -name '*.sql' -mtime +15 | xargs rm
xargs
es el comando que "convierte" su entrada estándar en argumentos de otro programa o, como lo ponen con mayor precisión en la man
página,
construir y ejecutar líneas de comando desde la entrada estándar
Tenga en cuenta que si los nombres de archivo pueden contener caracteres de espacio en blanco, debe corregir eso:
find -type f -name '*.sql' -mtime +15 -print0 | xargs -0 rm
Pero en realidad, find
tiene un atajo para esto: la -delete
opción:
find -type f -name '*.sql' -mtime +15 -delete
Tenga en cuenta las siguientes advertencias en 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.
PD Tenga en cuenta que canalizar directamente rm
no es una opción, porque rm
no espera nombres de archivo en la entrada estándar. Lo que estás haciendo actualmente es canalizarlos hacia atrás.