it-swarm-es.tech

Cómo eliminar carpetas cada N minutos desde la línea de comandos

Estoy tratando de ejecutar el siguiente comando para eliminar carpetas tmp mayores de 3 minutos usando el siguiente:

 find /tmp/tmp* -mmin +3 -exec rm -rf {} \;

El comando anterior falla. ¿Por qué?

find /tmp/tmp* -mmin +3 -exec rm -rf {} \;
find: `/tmp/tmpAJaHLX/crashes': No such file or directory
find: `/tmp/tmpbM5ac8/minidumps': No such file or directory
find: `/tmp/tmpbM5ac8/crashes/events': No such file or directory
find: `/tmp/tmpdQACdf/gmp': No such file or directory
find: `/tmp/tmpo1tbqu/thumbnails': No such file or directory
find: `/tmp/tmpW91Yel/extensions': No such file or directory
1
Tampa

Lo que está viendo probablemente sea el resultado del comando findorden transversal.

p.ej. dado un directorio simple

$ find somedir
somedir
somedir/file

luego

$ find somedir -exec rm -rfv {} \;
removed ‘somedir/file’
removed directory: ‘somedir’
find: `somedir': No such file or directory

Puede forzar un recorrido de profundidad primero usando -depth opción, es decir.

$ find somedir -depth -exec rm -rfv {} \;
removed ‘somedir/file’
removed directory: ‘somedir’

no da como resultado un error.

Alternativamente, puede usar el más simple find somedir -delete que (como se indica en la página del manual) enciende el -depth opción

-delete
       Delete files; true if removal succeeded.  If the removal failed,
       an  error message is issued.  If -delete fails, find's exit sta‐
       tus will be nonzero (when it eventually exits).  Use of  -delete
       automatically turns on the -depth option.
2
steeldriver