Compactar um arquivo sem incluir o diretório pai

14

Eu quero compactar muitas pastas em uma árvore de diretórios como

V-
 something.txt
 folder
 folder
 g.jpg
 h.jar

Quando eu tento compactá-lo, ele acaba criando um arquivo zip com a pasta v em vez do conteúdo dele (os subdiretórios e arquivos)

Como posso evitar isso?

    
por Dami 07.09.2014 / 03:10

3 respostas

16

Então, se eu entendi corretamente, você está tentando arquivar os arquivos & amp; pastas em uma pasta específica, mas sem incluir a pasta raiz.

Exemplo:

/test/test.txt
/test/test2.txt

onde test.txt e test2.txt seriam armazenados no zip, mas não / test /

Você pode acessar o diretório / test / e executar algo como

zip -r filename.zip ./*

O que criaria um arquivo na mesma pasta nomeada filename.zip. Ou se executá-lo fora da pasta, você pode executar,

zip -r test.zip test/*

O / * é a parte que inclui apenas o conteúdo da pasta, em vez da pasta inteira.

Edit: OP queria vários zips, a solução acabou sendo um pouco hack, estou curioso para saber se existe uma maneira melhor de fazer isso.

for d in */ ; do base=$(basename "$d") ; cd $base ; zip -r $base * ; mv "${base}.zip" .. ; cd .. ; done;
    
por zzbomb 07.09.2014 / 03:26
8

Que tal este comando?

$ cd somedir ; zip -r ../zipped.zip . * ; cd ..
    
por Alfred UC 09.03.2016 / 14:45
8

Use a opção -j ou --junk-paths no seu comando zip.

Na página de manual do zip :

-j

--junk-paths

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).
    
por robrtsql 28.07.2017 / 20:05