Questão Correndo encontrar e xargs em segundo plano


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?


4


origem


Espere, seu segundo exemplo devemos trabalho (exceto para o problema de espaços slhck menciona). - derobert


Respostas:


Se você quer rodar ambos em background, coloque-os em um subshell:

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

Mas por favor, não faça isso. Tubulação find saída para 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 …

E se find arquivos retornados com espaços em seu nome, você poderia - sem mesmo saber - excluir irreversivelmente as pastas erradas. Leia atentamente o find manual e o seção sobre como excluir arquivos para mais informações.

A maneira mais segura, no seu caso, seria:

find /tmp/ -type f -mtime +3 -delete &

8





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: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1


2