Como dividir um arquivo e compactar diretamente?

8

Eu tenho um arquivo de 100 GB e quero dividir em 100 arquivos de 1 GB cada (por quebra de linha)

por exemplo,

split --bytes=1024M /path/to/input /path/to/output

Para os 100 arquivos gerados, desejo aplicar o gzip / zip a cada um desses arquivos.

É possível usar um único comando?

    
por Ryan 26.05.2014 / 19:36

3 respostas

26

Use "--filter":

split --bytes=1024M --filter='gzip > $FILE.gz' /path/to/input /path/to/output

    
por 06.10.2014 / 05:15
0

Um one-liner usando uma condicional é o mais próximo que você pode chegar.

cd /path/to/output && split --bytes=1024M /path/to/input/filename && gzip x*

gzip será executado somente se split for bem-sucedido devido à% condicional&&, que também está entre cd e split , garantindo que o cd seja bem-sucedido também. Observe que split e gzip output para o diretório atual, em vez de ter a capacidade de especificar o diretório de saída. Você pode criar o diretório, se necessário:

mkdir -p /path/to/output && cd /path/to/output && split --bytes=1024M /path/to/input/filename && gzip x*

Para juntar tudo de novo:

gunzip /path/to/files/x* && cat /path/to/files/x* > /path/to/dest/filename
    
por 26.05.2014 / 22:54
0

Usar esse comando com a opção -d permite gerar sufixos numéricos.

split -d -b 2048m "myDump.dmp" "myDump.dmp.part-" && gzip myDump.dmp.part*

Arquivos gerados:

    myDump.dmp.part-00
    myDump.dmp.part-01
    myDump.dmp.part-02
    ...
    
por 26.01.2018 / 15:40