Как сделать каталоги в zip-файле относительно целевого каталога вместо моего рабочего каталога

25

Я вызываю команду zip из скрипта, где я не могу сменить каталог. Мне нужно сделать zip-файл материала data/kit123/из каталога, в котором находятся данные, но я хочу, чтобы содержимое zip было только содержимым kit123с путями относительно kit123.

Это структура каталогов

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

Мой скрипт выполняется в myworkingdir и не может изменить каталоги.

Если я позвоню

zip -r kit123.zip data/kit123

тогда структура в zip-файле будет

data
    kit123
        kitpart1
            file.xcf
            anotherfile.xcf
        kitpart2

но я хочу чтобы это было

kit123
    kitpart1
        file.xcf
        anotherfile.xcf
    kitpart2

Есть ли опция zip, которую я могу использовать для этого? Кажется странным, что это должно зависеть от моего рабочего каталога

Я знаю, что это не -j. что один разрушает структуру в kit123

Натан
источник
Бах, не бери в голову, я понял, как изменить каталог (в Python) У меня просто были плохо организованные разрешения. Я все еще хотел бы знать, если у почтового индекса есть такая опция все же.
Натан
Python zipfile.write(arcname=позволяет это: bocw
Сиро Сантилли, 8 сентября 18 августа

Ответы:

18

Как вы заметили в комментариях, теперь вы знаете, как изменить каталог с помощью вашего скрипта, я объясню ситуацию с zip относительно относительных путей.

Это, вероятно , проще всего открыть терминал и cdк kit123; Вы должны сделать целевой каталог вашим рабочим каталогом - вы не можете запустить команду из базы вашего домашнего каталога, или он выберет все пути. /home/$USER/..Если вы используете -jопцию, он удалит все пути, как нет. на самом деле не является эквивалентом опции tar, --stripс которой можно указывать разные уровни удаления пути.

Поэтому, пожалуйста, перейдите в целевой каталог ( kit123) и введите:

zip -r kit123.zip *

Это рекурсивно ( -r) сохранит все ( *) файлы и каталоги файлов в текущем каталоге ( kit123), и, поскольку относительные пути ( -p) сохранятся автоматически, если -jопция не присутствует, структура каталогов будет такой, как вы пожелаете. Kit123и подпапки ( kitpart1) с их собственными файлами будут присутствовать:

kit123
    kitpart1
        file.xcf
        anotherfile.xcf
    kitpart2

Вы можете проверить содержимое zip-файла с помощью unzip -l zipfile.zip.

Для получения дополнительной информации о других доступных опциях zip, смотрите man zipи справочную страницу Ubuntu онлайн .


источник