J'ai la commande suivante dans la partie d'un script shell de sauvegarde:
tar -cjf site1.bz2 /var/www/site1/
Lorsque j'énumère le contenu de l'archive, j'obtiens:
tar -tf site1.bz2
var/www/site1/style.css
var/www/site1/index.html
var/www/site1/page2.html
var/www/site1/page3.html
var/www/site1/images/img1.png
var/www/site1/images/img2.png
var/www/site1/subdir/index.html
Mais je voudrais supprimer la partie /var/www/site1
du répertoire et des noms de fichiers dans l'archive, afin de simplifier l'extraction et d'éviter une structure de répertoire constante inutile. Je ne sais jamais, au cas où j'extraireais des sites Web sauvegardés dans un endroit où les données Web n'étaient pas stockées /var/www
.
Pour l'exemple ci-dessus, j'aimerais avoir:
tar -tf site1.bz2
style.css
index.html
page2.html
page3.html
images/img1.png
images/img2.png
subdir/index.html
Ainsi, lorsque je procède à l'extraction, les fichiers sont extraits dans le répertoire courant et je n'ai pas besoin de déplacer les fichiers extraits par la suite, de sorte que les structures de sous-répertoires soient préservées.
Il y a déjà beaucoup de questions sur tar et la sauvegarde dans stackoverflow
et à d'autres endroits sur le web, mais la plupart d'entre eux demandent de supprimer toute la structure du sous-répertoire (aplatissement), ou simplement d'ajouter ou de supprimer l'initiale / dans les noms (je ne ' je ne sais pas ce qu'il change exactement lors de l'extraction), mais pas plus.
Après avoir lu certaines des solutions trouvées ici et là ainsi que le manuel, j'ai essayé:
tar -cjf site1.bz2 -C . /var/www/site1/
tar -cjf site1.bz2 -C / /var/www/site1/
tar -cjf site1.bz2 -C /var/www/site1/ /var/www/site1/
tar -cjf site1.bz2 --strip-components=3 /var/www/site1/
Mais aucun d'eux n'a fonctionné comme je le souhaite. Certains ne font rien, d'autres n'archivent plus de sous-répertoires.
C'est à l'intérieur d'un script shell de sauvegarde lancé par un Cron, donc je ne sais pas bien, quel utilisateur l'exécute, quel est le chemin et le répertoire courant, donc toujours écrire un chemin absolu est requis pour tout, et je préférerais ne pas changer le répertoire actuel pour éviter de casser quelque chose de plus dans le script (car il sauvegarde non seulement les sites Web, mais aussi les bases de données, puis envoie tout cela sur FTP, etc.)
Comment y parvenir?
Ai-je juste mal compris le fonctionnement de l'option -C?
-C
signifie simplement "changer de répertoire", tout en remplaçant un chemin (ou préfixe) ne peut être fait que par --transform
. rif. superuser.com/questions/595510/prepend-prefix-in-tar/595512 vous pouvez simplement -C (changer de répertoire) et --transformer: `` `tar cjf site1.bz2 --transform" s / ^ \. \ // $ targetbase / "-C / var / www / site1. ``