¿Cómo dividir un archivo y comprimirlo directamente?

12

Tengo un archivo de 100 GB y quiero dividirlo en 100 archivos de 1 GB cada uno (por salto de línea)

p.ej

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

Para los 100 archivos generados, quiero aplicar gzip / zip a cada uno de estos archivos.

¿Es posible usar un solo comando?

Ryan
fuente
2
Para hasta 1 GB por archivo (menos si la siguiente línea lo supera) use --line-bytes=1024M.
Brian

Respuestas:

30

Utilice "--filtro":

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

Peter
fuente
esto no funciona para mí, sigue sobrescribiendo el mismo archivo ya que $ FILE no está definido y ni siquiera escribe en la carpeta des.
splaisan
mi error, necesita comillas simples para reemplazar $ FILE, mi gran error, disculpas y gracias por la ayuda: este comando final me funcionó para guardar datos fastq que vienen en bloques de 4 líneas: 'zcat ERR3152365.fastq.gz | split -a 3 -d -l 1200000 - sufijos numéricos --filter = 'pigz -p 8> $ FILE.fq.gz' - splitout / part_ '
splaisan
0

Una línea con un condicional es lo más cerca que puede acercarse.

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

gzipsolo se ejecutará si splites exitoso debido al condicional &&que también está entre cdy splitasegurándose de que también cdsea ​​exitoso. Tenga en cuenta eso splity gzipenvíe al directorio actual en lugar de tener la capacidad de especificar el directorio de salida. Puede hacer el directorio, si es necesario:

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

Para volver a armar todo:

gunzip /path/to/files/x* && cat /path/to/files/x* > /path/to/dest/filename
Pausado hasta nuevo aviso.
fuente
0

El uso de este comando con -dopción le permite generar sufijos numéricos.

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

Archivos generados:

    myDump.dmp.part-00
    myDump.dmp.part-01
    myDump.dmp.part-02
    ...
Iván
fuente