Cómo almacenar una carpeta grande en un solo archivo sin compresión

11

Quiero tomar una carpeta de 78 gb y almacenarla en un solo archivo (para cargarla en un servicio en la nube), como si la estuviera comprimiendo en un archivo, pero no quiero ninguna compresión (no tengo tanta CPU tiempo disponible). ¿Hay alguna forma de que pueda lograr esto, tal vez un comando de terminal que no conozco?

cjmaria
fuente
1
Hay un tarcomando en Linux. tar -cf long.file.tar folder
Costas
55
FYI: Hay programas de compresión rápida, algunos que serán más rápidos que la velocidad de escritura de su disco, y muchos que serán más rápidos que su red. Usar uno de esos realmente acelerará las cosas, si los datos son comprimibles. Por ejemplo, lzopestá diseñado para la velocidad.
derobert

Respuestas:

20

Uso tar: tar -cf my_big_folder.tar /my/big/folder

Restaurar el archivo con tar -xf my_big_folder.tar -C /

-C cambiará al directorio raíz para restaurar su archivo, ya que el archivo creado anteriormente contiene rutas absolutas.

EDITAR : Debido al tamaño relativamente grande del archivo, sería mejor enviarlo [directamente] a su ubicación final, utilizando SSH o un punto de montaje del recurso / carpeta en la nube. Por ejemplo, como sugiere Cole Johnson :

tar -cf /network/mount/point/my_big_folder.tar /my/big/folder

o

tar -c /my/big/folder | ssh example.com "cat > my_big_folder.tar"

EDITAR : como Blacklight Shining también sugiere , si desea evitar rutas absolutas, puede cambiar al padre de la carpeta grande y tardesde allí:

tar -cf /network/mount/point/my_big_folder.tar \
    -C /my/big/folder/location the_big_folder

o

tar -cC /my/big/folder/location the_big_folder | \
ssh example.com "cat > my_big_folder.tar"

Reflexiones personales

La inclusión de caminos relativos o absolutos es una cuestión de preferencia personal.

Hay casos en que las rutas absolutas son obvias, por ejemplo, para una restauración en una situación de recuperación ante desastres. Para proyectos o colecciones locales, es común archivar un árbol de directorios desde el padre de la carpeta deseada para evitar saturar el directorio actual, en caso de que el archivo se descomprima accidentalmente en su lugar. Si big_folder se encuentra en algún lugar profundo de una jerarquía * NIX estándar , puede tener sentido comenzar a archivar la primera carpeta no estándar donde big_folder se desvía y su árbol de directorios desde allí.

Finalmente, yendo pedante aquí, los tarmiembros del archivo siempre son relativos, ya que a) pueden restaurarse en cualquier directorio yb) tar elimina el inicio /al crear un archivo. Personalmente, siempre uso -C cuando desempaqueta un archivo.

Comunidad
fuente
Para aclarar la edición: hazlo en tar -cf /network/mount/point/folder.tar /folderlugar de compartirlo con la computadora local y luego subirlo si puedes
Cole Johnson
Exacto. Cuanto más leo mi edición, más creo que se ve confundida. Gracias por tu perspicacia.
1
Vale la pena señalar el camino para evitar hacer el archivo comprimido con rutas absolutas: tar -cf $archive.tar -C $source_dir .. Si la máquina de destino no tiene directorio con el mismo camino que el directorio de origen, usted necesita para hacer eso. Solo asegúrese de -Cingresar a un nuevo directorio cuando extraiga ( mkdir $destination_dir && tar -xf $archive.tar -C $destination_dir); de lo contrario, el contenido del archivo se descargará en el directorio en el que se encuentre.
Blacklight Shining
2

Alternativa: cpio

(cd /my/big/folder && find . -depth -print0 | cpio -0o > myfolder.cpio)

Desembalaje al directorio actual:

cpio -id < myfolder.cpio

Advertencias:

  • Si se usa en find /my/big/folderlugar de cd, el archivo contendrá rutas completas y la extracción intentará seguirlas;
  • Los archivos grandes (> 2 GB) pueden ser un problema;
Vi.
fuente
Sin embargo, Cpio tiende a ser mucho más lento que el alquitrán si se usa con el tamaño de bloque predeterminado de 512. ( fixunix.com/sco/89900-cpio-performance-vs-tar-bit-mystery.html )
PSkocik