Rompa un archivo grande en pedazos más pequeños

Respuestas:

79

Puedes usar split y cat .

Por ejemplo algo como

$ split --bytes 500M --numeric-suffixes --suffix-length=3 foo foo.

(donde está el nombre de archivo de entrada fooy el último argumento es el prefijo de salida). Esto creará archivos como foo.000 foo.001...

El mismo comando con opciones cortas:

$ split -b 100k -d -a 3 foo foo

También puede especificar "--line-bytes" si desea que se divida en los límites de la línea en lugar de solo el número exacto de bytes.

Para volver a ensamblar las piezas generadas, puede usar, por ejemplo:

$ cat foo.* > foo_2

(suponiendo que el shell clasifica los resultados del bloqueo del shell, y el número de partes no excede el límite de argumentos dependiente del sistema)

Puede comparar el resultado a través de:

$ cmp foo foo_2
$ echo $?

(que debería generar 0)

Alternativamente, puede usar una combinación de find / sort / xargs para volver a ensamblar las piezas:

$ find -maxdepth 1 -type f -name 'foo.*'  | sort | xargs cat > foo_3
maxschlepzig
fuente
2
Pruebe este comando:man split cat md5sum
Kevin M
66
Al armar, recomiendo cat foo.{000..NNN}dónde NNNestá la última pieza esperada. De esa forma, recibirá un mensaje de error si falta una de las piezas. Pero tenga en cuenta que -dobtener sufijos numéricos es específico de la división GNU; en otras plataformas que tiene que conformarse con foo.aaa, foo.aab, etc.
'parada SO siendo malos' Gilles
1
Y tenga en cuenta que, para split, KB = 1000, K = 1024, MB = 1000 * 1000, M = 1024 * 1024, etc.
Zorawar
1
¿No debería ... cat > foo_3ser ... cat >>foo_3?
alk
1
Si decides aliviar el dolor usando una utilidad. rary a 7zipmenudo se usan para hacer que tales divisiones sean más fáciles de volver a montar en plataformas cruzadas
infijo del
4

También puede hacer esto con Archive Manager si prefiere una GUI. Busque en 'Guardar-> Otras opciones-> Dividir en volúmenes de'.


fuente
55
Lo etiqueté como 'línea de comandos', pero gracias por la respuesta :)
Stefan