tar comprime a pasta, mas cria uma estrutura aninhada

3

Eu tenho as seguintes pastas em uma máquina linux

./myFolder
    ./tmp
    ./packages
    ./zips
    compress.sh

Eu corro tar -czf ./zips/someFile.tar.gz ./tmp/someFolder de compress.sh . A pasta é criada, mas o aninhamento resultante ocorre dentro do arquivo zip:

. -> tmp -> someFolder

Como posso compactar esse arquivo para que, quando eu abri-lo, seja apenas someFolder e não someFolder dentro de tmp , dentro de . ?

    
por Kousha 21.05.2015 / 18:12

3 respostas

3

Você pode tentar seguir:

tar -czf ./zips/someFile.tar.gz -C ./tmp/ someFolder
    
por 21.05.2015 / 18:34
2

Você pode usar o parâmetro -C ou --directory

tar -czf ./zips/someFile.tar.gz -C ./tmp someFolder

De man tar

-C, --directory DIR
      change to directory DIR

Exemplo

% ls -og
total 4
-rw-rw-r-- 1    0 Mai 21 18:39 bar
drwxrwxr-x 2 4096 Mai 21 18:39 foo

tar -cvf ../sample.tar -C /home/user/tmp .

tar -tvf ../sample.tar 
drwxrwxr-x user/user 0 2015-05-21 18:39 ./
-rw-rw-r-- user/user 0 2015-05-21 18:39 ./bar
drwxrwxr-x user/user 0 2015-05-21 18:39 ./foo/
    
por 21.05.2015 / 18:20
1

O comando tar não zip. Nem mesmo com o sinalizador -z . No entanto, ele coleta uma série de arquivos / pastas e, opcionalmente, compacta o resultado. Para contrastar, zip comprime cada arquivo e o adiciona a um arquivo. zip e tar usam algoritmos de compactação diferentes.

A página man do tar mostra o -C flag ( --directory ) para alterar o diretório, então você poderia fazer isso

tar czfC zips/someFile.tar.gz tmp someFolder

Você também pode usar a opção --transform para remover a% principaltmp/

tar czf zips/someFile.tar --transform 's#^tmp/##' tmp/someFolder
    
por 21.05.2015 / 18:38

Tags