como especificar o diretório de destino descompactado

21

Existe uma opção no comando zip linux, de modo que eu possa codificar o diretório de destino no qual ele descompacta. Por exemplo, eu gostaria de compactar arquivos ./mydir em myzipfile.zip, mas quero que o comando unzip crie um diretório específico "projx" e expanda os arquivos que estavam sob ./mydir.

zip -r myzipfile.zip mydir (-option to expand into 'projx' when unzipped? )
seedhom
fonte
No Unix: unix.stackexchange.com/questions/12686/…
Ciro Santilli escreveu

Respostas:

18

Não existe essa opção, pelo menos não para o Info-ZIP. Você precisa criar um diretório projx , mover / copiar seus arquivos para ele e depois passá-lo para zip.

Se o diretório já existir, basta passar a opção -dpara unzippara especificar o diretório de destino para extração.

scai
fonte
4

Para fazer isso, há um outro caminho. Você pode achatar todo o conteúdo do arquivo zip usando o método a seguir. O diretório de destino é " projx " e execute o seguinte comando.

cd /projx && unzip -j /path/to/myzipfile.zip

A opção -j é chamada de "caminhos indesejados" e apenas despeja cada arquivo no diretório atual em vez de extrair qualquer estrutura de diretório.

Chaminda Bandara
fonte
0

Não conheço uma opção específica da linha de comando, mas você pode usar os seguintes comandos para alcançar sua meta:

ln -s mydir projx
zip -r myzipfile.zip projx
rm projx

O primeiro comando cria um link simbólico, para que você possa acessar os arquivos mydirtambém via projx. Em seguida, usando Info-ZIP(testado com a versão 2.31) o link simbólico é desreferenciado (este é o padrão, a menos que você especifique -y) e os arquivos são armazenados recursivamente:

adding: projx/ (stored 0%)
adding: projx/foo.1 (deflated 23%)
adding: projx/bar.2 (deflated 73%)
...

Veja bem, o nome da pasta também é armazenado no arquivo - portanto, após a extração, o diretório projxé criado.

No entanto, não consigo pensar em uma possibilidade de armazenar caminhos absolutos, mas essa é uma péssima ideia.

mpy
fonte
Caminho absoluto só funciona em MacOS por opção especificar -jj. Em outros sistemas operacionais, apenas a opção -jé suportada (e -jjé interpretada como -j), que remove qualquer caminho principal e, portanto, leva ao oposto (um design muito inteligente ...).
Scai