script para concatenar vários arquivos de texto encontrados em arquivos zip aninhados em várias pastas

3

Tenho 30 gig de arquivos de texto e arquivos html de várias origens em uma hierarquia de pastas aninhadas. Todas essas pastas estão no meu diretório pessoal em uma pasta chamada zipFiles. A hierarquia tem 20 níveis de profundidade - alguns ramos mais profundos do que outros. Eu quero concatenar o texto de todos esses arquivos em um arquivo de texto enorme para usar como um RDD em um projeto Spark. Obviamente, eu precisaria converter os arquivos html em texto removendo os códigos de formatação html também.

Minha abordagem seria: iterar pela hierarquia de pastas aninhadas (não sei como fazer isso no bash) descompacte o arquivo se é html, converta para texto adicione-o ao enorme resultado

Os problemas que vejo com isso estão ficando sem memória RAM - se eu fizer tudo isso na memória apenas adicionando o texto a uma variável no código.

Se eu abrir o arquivo HUGE do disco, escrever nele e fechar o arquivo, então eu estou debatendo o disco e ele também irá lentamente.

É bash scripting minha única solução porque me assusta. Eu acho que poderia fazê-lo em python, mas eu preciso saber como descompactar em python e fazer html para conversão de texto também.

    
por aquagremlin 14.02.2016 / 19:03

1 resposta

2

find é uma boa ferramenta quando você precisa fazer algo recursivamente nos diretórios. zcat pode

Minha abordagem seria algo assim:

find /home/username/zipFiles -type f -name "*.zip" -exec zcat {} \; > outputfile.txt

Exemplo:

$ df > testfile.txt                                            
$ zip testArchive testfile.txt
  adding: testfile.txt (deflated 54%)
$ find . -maxdepth 1 -name "*.zip" -exec zcat {} \;            
Filesystem     1K-blocks     Used Available Use% Mounted on
udev             1954212        4   1954208   1% /dev
tmpfs             393160     3392    389768   1% /run
/dev/sda1      115247656 82424300  26946008  76% /
none                   4        0         4   0% /sys/fs/cgroup
none                5120        0      5120   0% /run/lock
none             1965792       80   1965712   1% /run/shm
none              102400       32    102368   1% /run/user
cgmfs                100        0       100   0% /run/cgmanager/fs
/dev/sdb1       30343056       48  30343008   1% /media/xieerqi/SDCZ43-032G
    
por Sergiy Kolodyazhnyy 16.02.2016 / 00:53