web-dev-qa-db-fra.com

tar: Suppression des `/ 'en tête des noms de membres

root@server # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading `/' from member names

Comment puis-je résoudre ce problème et conserver le / sur les noms de fichiers?

149
superuser

Utilisez le --absolute-names ou -P option pour désactiver cette fonction.

tar fczP bkup.tar.gz /home/foo/

tar fcz bkup.tar.gz --absolute-names /home/foo
80
Barmar

C'est en fait une fonctionnalité, pas un problème. Les archives avec des emplacements absolus constituent un risque pour la sécurité. Les attaquants pourraient utiliser ces archives pour inciter les utilisateurs à installer des fichiers dans des emplacements critiques du système.

Oui, vous pouvez utiliser -P. Mais qu'y a-t-il de mal à autoriser tar à supprimer la barre oblique et à demander simplement à l'utilisateur de l'archive d'effectuer explicitement l'extraction dans le répertoire racine? Ensuite, ils impactent consciemment les emplacements critiques du système et ne peuvent pas le faire par accident.

90
Mark Adler

Si vous voulez vous débarrasser de "Suppression des`/'principaux des noms de membres "en cours d'impression sur STDERR, mais que vous souhaitez toujours laisser ces barres obliques comme tar le fait judicieusement par défaut, j'ai vu une excellente solution ici = par le commentateur timsoft.

La solution consiste à utiliser l'option -C pour passer du répertoire à la racine (/), puis à spécifier l'arborescence de fichiers à archiver sans une barre oblique de début, car maintenant vous seulement besoin d'un chemin relatif. Cela fait la même chose qu'une commande tar create normale, mais aucune suppression n'est nécessaire:

tar fcz bkup.tar.gz -C / home/foo/
86
Marcus

Un mois de retard, mais j'ai trouvé que la solution la plus appropriée pour mon cas (dans un script Shell) est d'aller dans le répertoire parent et d'y exécuter la commande.

cd /var/www/
tar -czf mysite.gz mysite

Au lieu de:

tar -czf /var/www/mysite.gz /var/www/mysite
35
amd

Voici comment je l'ai fait en utilisant la méthode de la force brute: 2>&1 | grep -v "Removing leading".

Par exemple:

tar -cf "$BKUPDIR/${BKUPFILE}.tar" --overwrite --exclude '.*' --one-file-system "$SRCDIR" 2>&1 | grep -v  "Removing leading"
7
bjackfly

Essayez d'utiliser -C pour le chemin uniquement, ce qui empêcherait la compression avec des chemins complets:

root@server # tar fcz bkup.tar.gz -C /home/ foo/
3
Nick Tsai

J'ai résolu ce problème avec:

cd /home/foo && tar czf ~/backup.tar.gz .

de cette façon, vous n'essayez pas de mettre des chemins absolus dans l'archive tar en premier lieu. Si vous voulez le décompresser à la racine du système de fichiers, vous

cd / && tar xzf backupt.tar.gz après l'avoir transféré.

2
James