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?

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.


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

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

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).


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

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.