Como apagar pastas a cada N minutos da linha de comando

1

Estou tentando executar o comando abaixo para excluir pastas tmp maiores que 3 minutos, usando o seguinte:

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

O comando acima falha. 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
    
por Tampa 16.03.2016 / 14:46

1 resposta

2

O que você está vendo provavelmente é resultado da ordem de passagem do comando find .

por exemplo. dado um diretório simples

$ find somedir
somedir
somedir/file

então

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

Você pode forçar um avanço em profundidade usando a opção -depth , ou seja,

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

não resulta em erro.

Como alternativa, você pode usar o mais simples find somedir -delete , que (conforme observado na página de manual) ativa a opção -depth

-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.
    
por steeldriver 16.03.2016 / 16:11