Nombres de Archivos con Espacios a la Salida de find

Uso un script para ir eliminando viejos archivos de forma periódica a través de una tarea de Cron pero había empezado a fallar porque empezaban a aparecer nombres de ficheros con espacios. Al ocurrir esto, la salida que le pasaba a xargs y a su vez a rm fallaba. La solución viene en la página de manual.

$ man xargs
--null
-0     Input  items  are terminated by a null character instead of by whitespace, and the quotes and backslash are not special (every character is taken literally).
       Disables the end of file string, which is treated like any other argument.  Useful when input items might contain white space, quote marks,  or  backslashes.
       The GNU find -print0 option produces input suitable for this mode.

Perfectamente nos explica que debemos incluir el parámetro -print0 para que find genere una salida en la que por cada nombre de fichero se añada un carácter nulo, esto lo entenderá xargs que tomará el nombre del fichero completo incluyendo los espacios y caracteres especiales y se los pasará a rm que los borrará sin problema.

Así ha quedado el comando

TARGET="/path/to/files"
find $TARGET -maxdepth 1 -type f -name "*" -mtime +60 -print0 | xargs -0 rm;

Comments are closed.