compactação tar sem estrutura de diretório

compactação tar sem estrutura de diretório

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 comprimo os dois diretórios por:

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

Eu obtiveresultado.tar.gzmas mantém a estrutura de diretórios. Quero dizer, quando eu extraio oresultado.tar.gz, eu consegui dir_1& dir_2de novo.

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

result/
   file1.png 
   ... 
   fileN.png 
   fileA.txt
   ...
   fileZ.txt

Responder1

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

Na página do manual 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 deseja.

Responder2

Com o GNU tar, você pode usar a --transformopção de reescrever nomes de arquivos ao adicioná-los ou extraí-los de/para um arquivo. Com BSD tar ou pax, a opção -sfaz a mesma coisa.

Para remover o componente principal do diretório (para que dir_1/subdir/somefileseja 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/somefilesejam armazenados como somefile):

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

informação relacionada