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_2
de 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 -C
opçã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 --transform
opção de reescrever nomes de arquivos ao adicioná-los ou extraí-los de/para um arquivo. Com BSD tar ou pax, a opção -s
faz a mesma coisa.
Para remover o componente principal do diretório (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
sejam armazenados como somefile
):
tar -czf result.tar.gz --transform '!^.*/!!' dir_1 dir_2