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?
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
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.
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/
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
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"
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/
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é.