web-dev-qa-db-fra.com

Comment créer les répertoires d'un fichier Zip par rapport au répertoire cible au lieu de mon répertoire de travail

J'appelle la commande Zip depuis un script où je ne peux pas changer de répertoire. Je dois créer un fichier Zip contenant les éléments dans data/kit123/ à partir du répertoire contenant les données, mais je souhaite que le contenu du fichier Zip ne soit que le contenu de kit123, avec les chemins relatifs à kit123.

C'est la structure de répertoire

myworkingdir
    data
        kit123
            kitpart1
                file.xcf
                anotherfile.xcf
            kitpart2
                ...
        kit124
            ...

Mon script s'exécute dans myworkingdir et ne peut pas changer de répertoire.

Si j'appelle

Zip -r kit123.Zip data/kit123

alors la structure dans le fichier Zip sera

data
    kit123
        kitpart1
            file.xcf
            anotherfile.xcf
        kitpart2

mais je veux que ce soit

kit123
    kitpart1
        file.xcf
        anotherfile.xcf
    kitpart2

Existe-t-il une option Zip que je peux utiliser pour accomplir cela? Il semble étrange que cela dépende de mon répertoire de travail

Je sais que ce n'est pas -j. que l'on détruit la structure dans kit123

22
Nathan

Comme vous le constatez dans les commentaires, vous savez maintenant comment changer de répertoire avec votre script, je vais vous expliquer la situation de Zip en ce qui concerne les chemins relatifs.

Il est probablement plus facile d’ouvrir le terminal et cd à kit123; vous devez définir le répertoire cible comme répertoire de travail. Vous ne pouvez pas exécuter la commande à partir de la base de votre répertoire personnel, sinon tous les chemins de /home/$USER/.. seront récupérés. Si vous utilisez l'option -j, tous les chemins seront supprimés, il n'y a pas vraiment d'équivalent de l'option tar --strip avec laquelle différents niveaux de suppression de chemin peuvent être spécifiés.

Alors s'il vous plaît cd à votre répertoire cible (kit123) et entrez:

Zip -r kit123.Zip *

Ceci conservera récursivement (-r) tous les (*) fichiers et répertoires des fichiers du répertoire en cours (kit123), et comme les chemins relatifs (-p) sont conservés automatiquement sauf si l'option -j est présente, la structure du répertoire sera celle que vous souhaitez. Kit123 et les sous-dossiers (kitpart1) avec leurs propres fichiers seront présents:

kit123
    kitpart1
        file.xcf
        anotherfile.xcf
    kitpart2

Vous pouvez vérifier le contenu du fichier Zip avec unzip -l zipfile.Zip.

Pour plus d'informations sur les autres options disponibles pour Zip, voir man Zip et la page de manuel Ubuntu en ligne .

15
user76204