Cambiar directorio de trabajo

13

Estoy tratando de comprimir un directorio en

/home/cyrus/sql

Y quería cambiar el directorio de trabajo al comprimir la carpeta:

/ $ zip -b /home/cyrus sql.zip /home/cyrus/sql

Pero cuando reviso el archivo zip:

/ $ unzip -l sql.zip

Archive:  sql.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2013-05-30 10:59   home/cyrus/sql/
  1776642  2013-05-23 10:22   home/cyrus/sql/wordpress.sql
---------                     -------
  1776642                     2 files

La carpeta raíz debería haber sido sql. ¿Qué he hecho mal?

Jürgen Paul
fuente

Respuestas:

10

De man zip:

-b path

 --temp-path path

Use la ruta especificada para el archivo zip temporal. Por ejemplo:

zip -b /tmp stuff *

colocará el archivo zip temporal en el directorio / tmp, copiando sobre stuff.zip al directorio actual cuando haya terminado. Esta opción es útil cuando se actualiza un archivo existente y el sistema de archivos que contiene este archivo antiguo no tiene suficiente espacio para contener archivos antiguos y nuevos al mismo tiempo. También puede ser útil cuando se transmite en algunos casos para evitar la necesidad de descriptores de datos. Tenga en cuenta que el uso de esta opción puede requerir que zip tome un tiempo adicional para copiar el archivo de almacenamiento cuando haya terminado en el sistema de archivos de destino.

Por defecto zipalmacena la ruta completa en relación con el directorio actual. Si desea que su archivo zip tenga su sqldirectorio como raíz, deberá ejecutar el comando desde el /home/cyrusdirectorio.

MattDMo
fuente
14

Si desea zipel contenido de un directorio determinado y almacenar el ziparchivo en el directorio actual, puede escribirlo:

(cd /some/dir && zip -r - dir-there) > file.zip
Stéphane Chazelas
fuente
5

-bespecifica dónde zipdeben colocarse los archivos temporales, no es que deba cambiar el directorio en alguna parte. De man zip:

 -b path
      Use the specified path for the temporary  zip  archive.

Prueba esto:

cd /home/cyrus && zip sql.zip sql
Chris Down
fuente
O cd /home/cyrus && zip /sql.zip sqlsi desea que se cree el archivo zip en la raíz.
tripleee
2

No estoy seguro si entiendo esto bien, pero -b no cambiará la carpeta raíz. Pondrá el archivo zip temporal en el directorio / home / cryus, copiando sobre sql.zip al directorio actual cuando haya terminado. Esta opción solo es útil cuando se actualiza un archivo existente, y el sistema de archivos que contiene este archivo antiguo no tiene suficiente espacio para contener archivos antiguos y nuevos al mismo tiempo.

tratar de usar:

-j Almacene solo el nombre de un archivo guardado (basura la ruta) y no almacene nombres de directorio. Por defecto, zip almacenará la ruta completa (relativa a la ruta actual).

Raza
fuente
1
-jpuede que no sea correcto; Supongo que el OP quiere mantener rutas relativas, no eliminar todas las rutas.
triplicado
2

Inspirado por la respuesta de Stephane:

(cd /home/cyrus; zip -r sql.zip sql;)

El resultado:

  1. tienes un sql.zip en / home / cyrus /
  2. sql.zip contiene el directorio sql / y todo su contenido
  3. tu PWD inicial no cambia
Dmitrii Cretu
fuente
44
¿Cómo es esto mejor?
Stephen Rauch
0

Puede ser más fácil vincular la carpeta que está intentando comprimir al directorio actual. De esa manera puedes quedarte donde estás.

ln -s /path/to/whatever .
zip -r myzip whatever

Ellos rm el enlace simbólico si lo desea.

Jonr
fuente