Evitar caminho indesejado no arquivo zip

39

Estou fazendo um script de shell para empacotar alguns arquivos. Estou fechando um diretório como este:

zip -r /Users/me/development/something/out.zip /Users/me/development/something/folder/

O problema é que o arquivo out.zip resultante possui o caminho inteiro do arquivo. Ou seja, quando descompactado, ele terá todo o caminho "/ Users / me / development / anotherthing /". É possível evitar esses caminhos profundos ao colocar um diretório em um arquivo?

Quando eu executo o zip dentro do diretório de destino, não tenho esse problema.

zip -r out.zip ./folder/

Nesse caso, não recebo todo o lixo. No entanto, o script em questão será chamado a partir de qualquer lugar.

FWIW, estou usando o bash no Mac OS X 10.6.

    
por jerwood 14.03.2010 / 02:30

2 respostas

74

Seu script deve usar cd ou pushd e popd para mover para o diretório que será a raiz do arquivo anterior , emitindo o comando zip . Como você faz isso exatamente vai depender de como o script sabe o que zipar. Mas, se você quiser que o / Users / me / development / something / folder seja zipado com caminhos internos de apenas ./ folder , será necessário fazer isso:

pushd /Users/me/development/something
zip -r /path/to/out.zip ./folder/
popd

Isso resultará em seu out.zip contendo os caminhos relativos que você deseja.

Se você precisar de ajuda com scripts, precisará mostrar seu script.

    
por 14.03.2010 / 02:59
4

The problem is that the resultant out.zip archive has the entire file path in it.
...
Is it possible to avoid these deep paths when putting a directory into an archive?

Sim. Use a opção -j com zip . -j é "lixo o caminho". De acordo com a página de manual no zip :

Store just the name of a saved file (junk the path), and do not store directory names. By default, zip will store the full path (relative to the current directory).

Usar -j significa o seguinte comando:

zip -j myarchive.zip file1.txt dir1/file2.txt dir2/dir3/file3.txt ../file4.txt

Criará um arquivo assim:

myarchive.zip
    |
    +-- file1.txt
    +-- file2.txt
    +-- file3.txt
    +-- file4.txt
    
por 04.01.2015 / 02:00