Como faço para criar os diretórios em um arquivo zip em relação ao diretório de destino em vez do meu diretório de trabalho

25

Estou chamando o comando zip de um script em que não consigo alterar o diretório. Eu preciso criar um arquivo zip do material no data/kit123/diretório em que os dados residem, mas quero que o conteúdo do zip seja apenas o conteúdo kit123, com caminhos relativos a kit123.

Esta é a estrutura de diretórios

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

Meu script é executado em myworkingdir e não pode alterar diretórios.

Se eu ligar

zip -r kit123.zip data/kit123

então a estrutura no arquivo zip será

data
    kit123
        kitpart1
            file.xcf
            anotherfile.xcf
        kitpart2

mas eu quero que seja

kit123
    kitpart1
        file.xcf
        anotherfile.xcf
    kitpart2

Existe uma opção de zip que eu possa usar para fazer isso? Parece estranho que deva depender do meu diretório de trabalho

Eu sei que não é -j. aquele destrói a estrutura dentro do kit123

Nathan
fonte
Não importa, eu descobri como alterar o diretório (em Python). Eu só tinha permissões mal organizadas. Eu ainda gostaria de saber se o zip tem essa opção.
Nathan
Python zipfile.write(arcname=permite que ele btw: docs.python.org/3.6/library/zipfile.html#zipfile.ZipFile.write
Ciro Santilli新疆改造中心法轮功六四事件

Respostas:

18

Conforme você observa nos comentários, agora você sabe como alterar o diretório com seu script, explicarei a situação com zip em relação aos caminhos relativos.

É provavelmente mais fácil de abrir o terminal e cdpara kit123; você precisa tornar o diretório de destino seu diretório de trabalho - não é possível executar o comando a partir da base do diretório inicial ou ele selecionará todos os caminhos de /home/$USER/..Se você usar a -jopção, ele removerá todos os caminhos, pois não há é realmente um equivalente da opção tar --stripcom a qual diferentes níveis de remoção de caminho podem ser especificados.

Então, vá para o diretório de destino ( kit123) e digite:

zip -r kit123.zip *

Isso -rpreservará recursivamente ( ) todos os ( *) arquivos e diretórios dos arquivos no diretório atual ( kit123) e, como os caminhos relativos ( -p) serão preservados automaticamente, a menos que a -jopção esteja presente, a estrutura de diretórios será a desejada. Kit123e subpastas ( kitpart1) com seus próprios arquivos estarão presentes:

kit123
    kitpart1
        file.xcf
        anotherfile.xcf
    kitpart2

Você pode verificar o conteúdo do arquivo zip com unzip -l zipfile.zip.

Para obter mais informações sobre as outras opções disponíveis zip, consulte man zipa página de manual do Ubuntu online .


fonte