tar: comment créer un fichier tar avec des répertoires de tête arbitraires sans 'cd' dans le répertoire parent

23

Disons que j'ai un répertoire de fichiers sur

/home/user1/dir1

et je veux créer un tar avec seulement "dir1" comme répertoire principal:

/dir1/file1
/dir1/file2

Je sais que je peux d'abord cd dans le répertoire

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

Mais lors de l'écriture de scripts, le saut de répertoire en répertoire n'est pas toujours favorable. Je me demande s'il existe un moyen de le faire avec des chemins absolus sans changer les répertoires actuels?

Je sais que je peux toujours créer un fichier tar avec des chemins absolus à l'intérieur et utiliser

--strip-components 

lors de l'extraction, mais parfois les noms de chemin supplémentaires sont des informations privées supplémentaires que vous ne souhaitez pas distribuer avec vos fichiers tar.

Merci!

Yan
la source

Réponses:

24

tar -C change de répertoire

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

btw, pratique pour suivre les changements de répertoires ... utilisez pushd et popd.

pushd .
cd /home/user1
tar cvfz dir1.tar.gz
popd
Philip Reynolds
la source
1
Merci. Je ne savais pas que l'option "-C" devait être utilisée avant les autres options ... J'ai déjà essayé "tar -cvzf dir1.tar.gz dir1 -C / home / user1 /" mais cela n'a pas fonctionné.
Yan
1
Ne fonctionne pas: tar: dir: ne peut pas stat: aucun fichier ou répertoire (en supposant que dir1 est sous / home / user1 /)
tribbloid
21

Avec gnu tar, vous pouvez créer une archive avec un répertoire de base différent du répertoire réel avec:

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

Adaptez simplement l'expression sed à vos besoins.

Christophe Drevet-Droguet
la source
5

OK, j'ai aussi découvert que

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

a également fonctionné comme je le voulais.

Yan
la source
Bien que les caractères génériques comme "*" ne fonctionnent pas
Curtis Yallop
2
tar -C /home/user1/dir -c .
Michael Graff
la source