Use "--filter":
split --bytes=1024M --filter='gzip > $FILE.gz' /path/to/input /path/to/output
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?
Use "--filter":
split --bytes=1024M --filter='gzip > $FILE.gz' /path/to/input /path/to/output
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
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
...