Obtendo “Nenhum arquivo ou diretório” ao excluir diretórios com find

0

Estou usando o Amazon Linux. Eu tenho essa declaração que é projetada para remover arquivos em um diretório

/bin/find $JBOSS_HOME/standalone/tmp/vfs -mindepth 1 -mmin +1441 -exec rm -rf {} \;

Mas isso resulta em um monte de declarações como esta

/bin/find: '/usr/java/jboss/standalone/tmp/vfs/deployment2b6836209f40596a': No such file or directory
/bin/find: '/usr/java/jboss/standalone/tmp/vfs/deployment1fae3ca49edb3384': No such file or directory
/bin/find: '/usr/java/jboss/standalone/tmp/vfs/deploymenta2b0c99bfdd7f444': No such file or directory
...

Existe uma maneira de fazer com que minha declaração não verifique arquivos que não existem ou, pelo menos, elimine todos esses erros?

    
por Dave 10.03.2017 / 16:24

1 resposta

1

Tenha em atenção que o seu comando remove directórios que não foram alterados num dia, mesmo que alguns ficheiros tenham sido alterados recentemente.

Assumindo que é isso que você quer, Stéphane Chazelas e thrig propuseram duas soluções nos comentários. O problema que você está enfrentando é que você instrua find para excluir um diretório e, em seguida, ele tenta percorrê-lo para ver se há arquivos nele que correspondam.

  • Passe -depth para informar find para processar primeiro o conteúdo de um diretório e o próprio diretório. Isso desperdiça um pouco de tempo analisando o conteúdo dos diretórios que serão removidos mais tarde.

    find $JBOSS_HOME/standalone/tmp/vfs -depth -mindepth 1 -mmin +1441 -exec rm -rf {} \;
    
  • Use -prune para instruir find a não explorar os diretórios que estão sendo removidos.

    find $JBOSS_HOME/standalone/tmp/vfs -mindepth 1 -mmin +1441 -exec rm -rf {} \; -prune
    

Se você pretendia apenas excluir arquivos antigos, informe find . Você pode usar -delete em vez de invocar rm .

find $JBOSS_HOME/standalone/tmp/vfs -mmin +1441 -type f -delete

Você pode remover os diretórios vazios:

find -depth $JBOSS_HOME/standalone/tmp/vfs -type d -empty -delete

Ou combine os dois, excluindo os diretórios depois que o arquivo que deve ser removido for removido:

find $JBOSS_HOME/standalone/tmp/vfs -depth -mindepth 1 -mmin +1441 -type f -delete -o -type d -empty -delete
    
por 11.03.2017 / 02:27

Tags