tar: Como criar um arquivo tar com diretórios principais arbitrários sem 'cd'ing para o diretório pai

23

Digamos que eu tenha um diretório de arquivos em

/home/user1/dir1

e eu quero criar um tar com apenas "dir1" como o diretório principal:

/dir1/file1
/dir1/file2

Eu sei que posso primeiro cd para o diretório

cd /home/user1/
tar czvf dir1.tar.gz dir1

Mas, ao escrever scripts, saltar de um diretório para outro nem sempre é favorável. Gostaria de saber se existe uma maneira de fazê-lo com caminhos absolutos sem alterar os diretórios atuais?

Eu sei que sempre posso criar um arquivo tar com caminhos absolutos DENTRO e usar

--strip-components 

ao extrair, mas às vezes nomes de caminho extras, são informações privadas extras que você não deseja distribuir com seus arquivos tar.

Obrigado!

Yan
fonte

Respostas:

24

O diretório tar -C muda

tar -C /home/user1/ -cvzf dir1.tar.gz dir1

btw, um prático para acompanhar mudanças de diretórios ... use pushd e popd.

pushd .
cd /home/user1
tar cvfz dir1.tar.gz
popd
Philip Reynolds
fonte
1
Obrigado. Eu não sabia que a opção "-C" deve ser usada antes de outras opções ... Tentei "tar -cvzf dir1.tar.gz dir1 -C / home / user1 /" antes, mas não funcionou.
197 Yan
1
Não funciona: tar: dir: Não é possível status: Nenhum tal lima ou diretório (supondo dir1 está sob / home / user1 /)
tribbloid
21

Com o gnu tar, você pode criar um arquivo com um diretório base diferente do atual com:

tar -c --transform 's,^\.,mybasedir,' .

Basta adaptar a expressão sed às suas necessidades.

Christophe Drevet-Droguet
fonte
5

OK, eu também descobri que

tar -czvf file1.tar.gz /home/user1/dir1/../dir1

também funcionou do jeito que eu queria.

Yan
fonte
Embora wildcards como "*", então não funcionam
Curtis Yallop
2
tar -C /home/user1/dir -c .
Michael Graff
fonte