En realidad se está Piping rm
's salida a la entrada de find
. Lo que queremos es utilizar la salida de find
como argumentos a rm
:
find -type f -name '*.sql' -mtime +15 | xargs rm
xargs
es el comando que "convertidos" su entrada estándar en argumentos de otro programa, o, ya que con más precisión lo puso en man
las páginas,
crear y ejecutar líneas de comandos desde la entrada estándar
Tenga en cuenta que si los nombres de archivo pueden contener caracteres de espacio en blanco, se debe corregir para que:
find -type f -name '*.sql' -mtime +15 -print0 | xargs -0 rm
Pero, en realidad, find
tiene un acceso directo para esto: la opción -delete
:
find -type f -name '*.sql' -mtime +15 -delete
Por favor, tenga en cuenta de la después de recibir 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.
PS Tenga en cuenta que la canalización directa a 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 conectarlos hacia atrás.
Gracias. Leí la página del hombre y le di una oportunidad a esa bandera. Estoy pasando una ruta completa pero obtengo "/ usr/www2/bar/htdocs/foo/rsync/httpdocs/db_backups /: ruta relativa potencialmente no segura". ¿Alguna idea de por qué? – jerrygarciuh
@jerrygarciuh eche un vistazo [aquí] (http://www.mail-archive.com/[email protected]/msg16944.html). –
gracias. No estoy seguro de haber seguido bien la publicación, pero cuando emulé su solución y puse -delete al final del comando eliminó todos los archivos sql independientemente del tiempo de modificación ... pero no tenía la advertencia, así que supongo eso es progreso ... – jerrygarciuh