Changer le répertoire de travail

13

J'essaie de compresser un répertoire sur

/home/cyrus/sql

Et je voulais changer le répertoire de travail lors du zip du dossier:

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

Mais quand je vérifie le fichier 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

Le dossier racine aurait dû être sql. Qu'est ce que j'ai mal fait?

Jürgen Paul
la source

Réponses:

10

De man zip:

-b path

 --temp-path path

Utilisez le chemin spécifié pour l'archive zip temporaire. Par exemple:

zip -b /tmp stuff *

placera l'archive zip temporaire dans le répertoire / tmp, copiant sur stuff.zip dans le répertoire courant une fois terminé. Cette option est utile lors de la mise à jour d'une archive existante et le système de fichiers contenant cette ancienne archive n'a pas assez d'espace pour contenir à la fois les anciennes et les nouvelles archives en même temps. Il peut également être utile lors du streaming dans certains cas pour éviter d'avoir besoin de descripteurs de données. Notez que l'utilisation de cette option peut nécessiter un délai supplémentaire de la part du zip pour copier le fichier d'archive une fois terminé dans le système de fichiers de destination.

Par défaut zipstocke le chemin complet par rapport au répertoire courant. Si vous voulez que votre fichier zip ait votre sqlrépertoire comme racine, vous devrez exécuter la commande à partir du /home/cyrusrépertoire.

MattDMo
la source
14

Si vous voulez ziple contenu d'un répertoire donné et stocker le zipfichier dans le répertoire courant, vous pouvez l'écrire:

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

-bspécifie où ziples fichiers temporaires doivent être placés, pas qu'il doit changer de répertoire quelque part. De man zip:

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

Essaye ça:

cd /home/cyrus && zip sql.zip sql
Chris Down
la source
Ou cd /home/cyrus && zip /sql.zip sqlsi vous voulez que le fichier zip soit créé à la racine.
tripleee
2

Je ne sais pas si je comprends bien, mais -b ne changera pas le dossier racine. Il placera l'archive zip temporaire dans le répertoire / home / cryus, copiant sur sql.zip dans le répertoire courant une fois terminé. Cette option n'est utile que lors de la mise à jour d'une archive existante, et le système de fichiers contenant cette ancienne archive n'a pas assez d'espace pour contenir à la fois les anciennes et les nouvelles archives en même temps.

Essayez d'utiliser:

-j Stocke uniquement le nom d'un fichier enregistré (junk le chemin) et ne stocke pas les noms de répertoire. Par défaut, zip stockera le chemin complet (par rapport au chemin actuel).

Raza
la source
1
-jpourrait ne pas avoir raison; Je suppose que l'OP veut conserver les chemins relatifs, pas supprimer tous les chemins.
tripleee
2

Inspiré par la réponse de Stéphane:

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

Le résultat:

  1. vous avez un sql.zip dans / home / cyrus /
  2. sql.zip contient le répertoire sql / et tout son contenu
  3. votre PWD initial ne change pas
Dmitrii Cretu
la source
4
Comment est-ce mieux?
Stephen Rauch
0

Il peut être plus facile de créer un lien symbolique vers le dossier que vous essayez de compresser vers le répertoire en cours. De cette façon, vous pouvez rester où vous êtes.

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

Les rm le lien symbolique si vous le souhaitez.

jonr
la source