Passa todos os arquivos * .txt para um script Python em paralelo

1

Eu tenho um script Python que pega um arquivo .txt e faz algo com ele. Eu preciso de um comando shell do Linux que irá procurar por arquivos .txt em todo o sistema e passar os arquivos .txt para o meu script Python. Eu acho que com xargs eu posso executar um processo para um arquivo para acelerar o programa. Como posso fazer isso?

    
por Edik Mkoyan 06.01.2016 / 22:27

2 respostas

0

Eu acredito que

find / -type f -name "*\.txt" -exec script.py '{}' \;

executaria o script.py em todos os arquivos txt em ou abaixo de /, resultando em tantas invocações do seu script quanto os arquivos encontrados.

Agora, se você deseja transmitir vários arquivos encontrados ao seu script simultaneamente, faça o seguinte:

find / -type f -name "*\.txt" -exec script.py '{}' +

Na página do manual do find (1) :

This variant of the -exec action runs the specified command on the selected files, but the command line is built by appending each selected file name at the end; the total number of invocations of the command will be much less than the number of matched files. The command line is built in much the same way that xargs builds its command lines [...]

Você pode obviamente conseguir a mesma coisa com xargs, mas a sintaxe é menos concisa, e é por isso que eu preferiria usar a ação -exec do find.

    
por 14.01.2016 / 06:07
0

Com o GNU Parallel, você pode fazer:

find . -type f -name "*\.txt" | parallel python myscript.py

Ele executará um trabalho por núcleo de CPU.

    
por 07.02.2016 / 16:26