Paralelize a exclusão recursiva com find

0

Desejo excluir recursivamente todos os arquivos que terminam com .in . Isso está demorando muito e tenho muitos núcleos disponíveis, então gostaria de paralelizar esse processo. De este tópico , parece que é possível usar xargs ou make para paralelizar find . Esta aplicação de encontrar é possível paralelizar?

Aqui está o meu comando serial atual:

find . -name "*.in" -type f -delete
    
por kilojoules 06.03.2017 / 17:57

1 resposta

3

Substituindo -delete por -print (que é o padrão) e encanamento em paralelo GNU deve principalmente fazê-lo:

find . -name '*.in' -type f | parallel rm --

Isso executará um trabalho por núcleo; use -j N para usar N trabalhos paralelos em vez disso.

Não é completamente óbvio que isso funcionará muito mais rápido do que excluir em seqüência, já que a exclusão é provavelmente mais E / S do que CPU-bound, mas seria interessante testar.

(Eu disse "principalmente fazê-lo" porque os dois comandos não são totalmente equivalente; por exemplo, a versão parallel não fará o certo coisa se alguns de seus caminhos de entrada incluírem caracteres de nova linha.)

    
por 06.03.2017 / 18:31