cómo especificar el directorio de destino descomprimir

21

¿Hay una opción en el comando zip de Linux para que pueda codificar el directorio de destino en el que se descomprime? Por ejemplo, me gustaría comprimir archivos ./mydir en myzipfile.zip pero quiero que el comando descomprimir cree un directorio específico "projx" y expanda los archivos que estaban debajo de ./mydir.

zip -r myzipfile.zip mydir (-option to expand into 'projx' when unzipped? )
seedhom
fuente
En Unix: unix.stackexchange.com/questions/12686/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

18

No existe tal opción, al menos no para Info-ZIP. Debe crear un proyecto de directorio usted mismo, mover / copiar sus archivos y luego pasarlo zip.

Si el directorio ya existe, simplemente pase la opción -da unzippara especificar el directorio de destino para la extracción.

scai
fuente
4

Para hacer eso hay otra manera. Puede aplanar todo el contenido del archivo zip utilizando el siguiente método. El directorio de destino es " projx " y ejecuta el siguiente comando.

cd /projx && unzip -j /path/to/myzipfile.zip

La opción -j se llama "rutas basura" y simplemente voltea cada archivo en el directorio actual en lugar de extraer cualquier estructura de directorio.

Chaminda Bandara
fuente
0

No sé acerca de una opción de línea de comando específica, pero puede usar los siguientes comandos para alcanzar su objetivo:

ln -s mydir projx
zip -r myzipfile.zip projx
rm projx

El primer comando crea un enlace simbólico, para que pueda acceder a los archivos mydirtambién a través de projx. Luego, usando Info-ZIP(probado con la versión 2.31), el enlace simbólico se desreferencia (esto es el valor predeterminado, a menos que especifique -y) y los archivos se almacenan de forma recursiva:

adding: projx/ (stored 0%)
adding: projx/foo.1 (deflated 23%)
adding: projx/bar.2 (deflated 73%)
...

Verá, el nombre de la carpeta también se almacena en el archivo, por lo que al extraerlo projxse crea el directorio .

Sin embargo, no puedo pensar en la posibilidad de almacenar rutas absolutas, pero esta es una mala idea de todos modos.

mpy
fuente
La ruta absoluta solo funciona en MacOS especificando la opción -jj. En otros sistemas operativos, solo -jse admite la opción (y -jjse interpreta como -j) que elimina cualquier ruta principal y, por lo tanto, conduce a lo opuesto (un diseño muy inteligente ...).
scai