nodejs - Node.js-Zip/Unzip una carpeta
npm unzipper (2)
Finalmente lo tengo, con la ayuda de @generalhenry (ver comentarios sobre la pregunta) y
Como se mencionó en los comentarios, debemos comprimir la carpeta en dos pasos:
Convertir la carpeta en un archivo
.tar
Comprimir el archivo
.tar
Para realizar el primer paso, necesitaba dos módulos node.js:
npm install tar
npm install fstream
El primero nos permite crear archivos .tar
. Puede tener acceso al código fuente aquí github.com/isaacs/node-tar
El segundo módulo de nodo nos ayudará a leer una carpeta y escribir un archivo. Con respecto al módulo fs
node.js básico, no sé si es posible leer un directorio (no estoy hablando de obtener todos los archivos en una matriz, usando fs.readdir
, sino manejar todos los archivos y su organización en carpetas).
Luego, cuando convierto la carpeta a un archivo .tar
, puedo comprimirlo utilizando Gzip()
de Zlib
.
Aquí está el código final:
var fstream = require(''fstream''),
tar = require(''tar''),
zlib = require(''zlib'');
fstream.Reader({ ''path'': ''path/to/my/dir/'', ''type'': ''Directory'' }) /* Read the source directory */
.pipe(tar.Pack()) /* Convert the directory to a .tar file */
.pipe(zlib.Gzip()) /* Compress the .tar file */
.pipe(fstream.Writer({ ''path'': ''compressed_folder.tar.gz'' })); /* Give the output file name */
Esto me ayudó a comprimir una carpeta completa usando node.js
2 cosas más:
Como puede ver, hay una falta de documentación en el módulo
tar
. Espero que esto se mejore pronto, ya que los dos ejemplos proporcionados hablan sobre cómo extraer contenido del archivo.tar
.Utilicé el módulo
fstream
para ayudarme a manejar el directorio de origen. ¿Se puede evitar esto usandofs
? No lo sé (por favor, comenta si tienes una idea).
Estoy buceando en Zlib de node.js. ¿Pude comprimir y descomprimir archivos usando los ejemplos provistos ( http://nodejs.org/api/zlib.html#zlib_examples ) pero no pude encontrar más información sobre cómo hacer lo mismo con las carpetas?
Una posibilidad (pero que considero que es un reto) es usar node-zip
módulo de node-zip
y agregar todos los archivos de la carpeta uno por uno. Pero me enfrentaré a un problema al descomprimir (perderé las carpetas en este caso).
¿Alguna idea de cómo comprimir (y luego descomprimir) una carpeta completa (respetando la jerarquía de sub-soldaduras) usando Node.js?
Gracias.
Puede usar el módulo tar-stream para crear un archivo tar. Es mucho más flexible y simple que el nodo-tar en que:
- Puede agregar archivos al archivo (no solo directorios, que es una limitación de node-tar)
- Funciona con flujos de sistemas de archivos de nodo normales (node-tar extrañamente requiere el uso del módulo fstream)
- Está bastante documentado (el nodo-tar no está bien documentado)
- Puedes crear un archivo sin golpear el sistema de archivos.
Cree el archivo tar, luego comprímalo usando zlib, luego escríbalo donde desee (red, sistema de archivos, etc.).