Executando find e xargs no background

4

Eu quero executar este comando em segundo plano porque o processo pode demorar muito tempo. Como posso enviá-lo para um processo em segundo plano?

find /tmp/ -type f -mtime +3 | xargs rm -Rf

Isso não funciona:

find /tmp/ -type f -mtime +3 | xargs rm -Rf &

Como posso fazer isso?

    
por sweb 19.07.2013 / 10:35

2 respostas

8

Se você quer rodar ambos em segundo plano, coloque-os em um subnível:

(find /tmp/ -type f -mtime +3 | xargs rm -Rf) &

Mas, por favor, não faça isso . Piping find output into xargs não é seguro, a menos que você use as seguintes opções, que são suportadas no GNU e no BSD find e xargs :

find … -print0 | xargs -0 …

Se find retornou arquivos com espaços em seu nome, você poderia, sem saber, excluir irreversivelmente as pastas incorretas. Leia atentamente o manual find e a seção sobre a exclusão de arquivos . mais informações.

A maneira mais segura, no seu caso, seria:

find /tmp/ -type f -mtime +3 -delete &
    
por 19.07.2013 / 10:47
2

Dependendo do hardware em que o sistema de arquivos está instalado, pode ser mais rápido excluir em paralelo:

( find . | parallel -X rm ) &

Em contraste com xargs , o GNU Parallel lida corretamente com espaço, "e 'em nomes de arquivos. Somente se você tiver nomes de arquivos contendo nova linha, precisará de -print0 / -0.

10 segundos de instalação:

wget -O - pi.dk/3 | bash

Assista ao vídeo de introdução para uma introdução rápida: link

    
por 20.07.2013 / 10:06