Como encontrar todos os arquivos com a mesma extensão dentro de um diretório em paralelo

0

Eu quero grep arquivos com uma extensão específica. Eu sei como fazer isso usando o comando find como golpe:

find . -type f -name "*.pptx"

Eu estou querendo saber se eu posso fazer o comando acima em paralelo (usando mais CPU).

Obrigado!

    
por user2090491 20.01.2015 / 09:59

1 resposta

2

find -ception:

find . -maxdepth 1 -mindepth 1 -type d -print0 | xargs -0 -L1 -P0 -i find {} -type f -name '*.pptx'
find . -maxdepth 1 -type f -name '*.pptx'
  • -maxdepth 1 -mindepth 1 restringe a pesquisa ao conteúdo imediato do diretório. Procuramos todos os subdiretórios ( -type d ).
  • Em seguida, usamos xargs para executar find em todos os subdiretórios. -0 em combinação com -print0 cuida de quaisquer caracteres especiais que possam ocorrer em nomes de arquivos.
  • -P0 informa xargs para executar o máximo de find s em paralelo. Você pode restringi-lo para executar no máximo N processos usando -PN .
  • Por fim, como já executamos find em todos os subdiretórios, finalmente executamos um find no diretório atual (e apenas no diretório atual - daí -maxdepth 1 ).

Palavra de cautela: find provavelmente será intensivo em I / O. Há apenas muito benefício que você pode obter ao executar várias instâncias em paralelo. Além disso, a saída dos muitos find s pode ficar confusa, reduzindo assim a utilidade dessa abordagem.

    
por muru 20.01.2015 / 10:12