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!

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

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.


5

OK, j'ai aussi découvert que

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

a également fonctionné comme je le voulais.


Bien que les caractères génériques comme "*" ne fonctionnent pas
Curtis Yallop

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.