Comment créer les répertoires dans un fichier zip par rapport au répertoire cible au lieu de mon répertoire de travail

25

J'appelle la commande zip à partir d'un script où je ne peux pas changer de répertoire. J'ai besoin de créer un fichier zip à data/kit123/partir du répertoire dans lequel les données résident, mais je veux que le contenu du zip soit uniquement le contenu de kit123, avec des chemins relatifs à kit123.

Ceci est la structure du 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 du 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

Nathan
la source
Bah, peu importe, j'ai compris comment changer de dir (en Python) Je venais d'avoir des permissions mal organisées. J'aimerais toujours savoir si zip a une telle option.
Nathan
Python le zipfile.write(arcname=permet btw: docs.python.org/3.6/library/zipfile.html#zipfile.ZipFile.write
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Réponses:

18

Comme vous le notez dans les commentaires, vous savez maintenant comment changer de répertoire avec votre script, je vais vous expliquer la situation avec zip concernant les chemins relatifs.

Il est probablement plus facile d'ouvrir le terminal et cdde kit123; vous devez faire du répertoire cible votre répertoire de travail - vous ne pouvez pas exécuter la commande à partir de la base de votre répertoire personnel ou il récupérera tous les chemins de /home/$USER/..Si vous utilisez l' -joption, il supprimera tous les chemins, comme il n'y en a pas 't vraiment un équivalent de l'option tar --stripavec laquelle différents niveaux de suppression de chemin peuvent être spécifiés.

Veuillez donc cd dans votre répertoire cible ( kit123) et entrez:

zip -r kit123.zip *

Ceci -rconservera récursivement ( ) tous les *fichiers ( ) et répertoires de fichiers dans le répertoire courant ( kit123), et comme les chemins relatifs ( -p) sont préservés automatiquement à moins que l' -joption ne soit présente, la structure du répertoire sera comme vous le souhaitez. Kit123et des 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 zipet la page de manuel Ubuntu en ligne .


la source