compactação de tar sem estrutura de diretório

7

No meu diretório atual, tenho dois subdiretórios:

dir_1/
   - file1.png
   - file2.png
   ...
   - fileN.png

dir_2/
   - fileA.txt
   - ...
   - fileZ.txt

Quando eu tar compactar os dois diretórios por:

tar -cvzf result.tar.gz dir_1/ dir_2/ 

Eu obtive result.tar.gz , mas mantém a estrutura do diretório. Quero dizer, quando eu extraio o result.tar.gz , eu tenho dir_1 & dir_2 novamente.

Como posso compactar tar para que a estrutura de diretório não permaneça, o que significa que quando eu extraio o arquivo tar.gz, eu só obtenho arquivos

result/
   file1.png 
   ... 
   fileN.png 
   fileA.txt
   ...
   fileZ.txt
    
por user842225 12.06.2014 / 09:43

2 respostas

9

Acho que você pode fazer isso com a opção -C .

Da página de manual do tar:

-C directory, --cd directory, --directory directory
    In c and r mode, this changes the directory before adding the following files.
    In x mode, change directories after opening the archive but before extracting
    entries from the archive.

Isso significa que você deve ser capaz de executar

tar cvzf result.tar.gz -C /path/to/dir1/ . -C /path/to/dir2/ .

para conseguir o que você quer.

    
por 12.06.2014 / 09:54
4

Com o GNU tar, você pode usar a opção --transform para reescrever os nomes dos arquivos ao adicioná-los ou extraí-los para / de um arquivo. Com o tar do BSD ou com o pax, a opção -s faz o mesmo.

Para remover o componente de diretório principal (para que dir_1/subdir/somefile seja armazenado como subdir/somefile ):

tar -czf result.tar.gz --transform '!^[^/]*/!!' dir_1 dir_2

Para remover todos os componentes do diretório (para que dir_1/subdir/somefile seja armazenado como somefile ):

tar -czf result.tar.gz --transform '!^.*/!!' dir_1 dir_2
    
por 13.06.2014 / 03:38