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 les /
noms de fichiers?
-C /
lors de son extraction.
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 les /
noms de fichiers?
-C /
lors de son extraction.
Réponses:
Utilisez l' option --absolute-names
ou -P
pour désactiver cette fonctionnalité.
tar fczP bkup.tar.gz /home/foo/
tar fcz bkup.tar.gz --absolute-names /home/foo
-C /
option décrite dans la réponse de @Marcus supprimera le message STDERR s'il s'agit de votre objectif principal.
C'est en fait une fonctionnalité, pas un problème. Les archives avec des emplacements absolus constituent un risque pour la sécurité. Les pirates pourraient utiliser de telles archives pour amener les utilisateurs à installer des fichiers dans des emplacements critiques du système.
Oui, vous pourriez utiliser -P
. Mais qu'y a-t-il de mal à autoriser tar à supprimer la barre oblique, et à simplement demander à l'utilisateur de l'archive de procéder explicitement à l'extraction dans le répertoire racine? Ensuite, ils ont un impact conscient sur les emplacements critiques du système et ne peuvent le faire par accident.
tar
. Ce message en particulier provoquait la fermeture tar
avec un statut 1
, ce qui me permettait de recevoir de fausses alertes par e-mail sur les sauvegardes réussies, tout simplement parce que tar
ce message était écrit pour STDERR. J'ai résolu ce problème en utilisant ma propre version modifiée de la solution de @ Marcus:cd /path/to/network/share && tar -cJf scripts.backup.tar.xz -C / home/user/scripts 2>/dev/null || [send an email alert]
-P
, par exemple si vous fournissez une fonctionnalité de capture instantanée de système de fichiers dans FUSE. Parfois, vous voudrez peut-être décompresser un instantané dans un répertoire spécifique plutôt que cwd
du point de vue de l'utilisateur.
Si vous voulez vous débarrasser de "Suppression des` / 'des principaux noms de membres "en cours d'impression sur STDERR, mais que vous souhaitiez tout de même laisser ces barres obliques comme le fait sagement tar, par défaut, j'ai trouvé une excellente solution ici, de la part de commenter timsoft.
La solution implique l'utilisation de l'option -C pour changer le répertoire à la racine (/), puis la spécification de l'arborescence de fichiers à archiver sans barre oblique car maintenant vous n'avez besoin que 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/
tar c -C / home/foo/*
), car le shell ne connaît pas la racine modifiée. Mais toujours une bonne réponse pour les autres cas.
-C /
ça ne marche pas pour moi, point. Cela n'empêche pas le stderr pour moi.
Un mois de retard, mais j'ai trouvé la solution la plus appropriée à mon cas (dans un script shell): aller dans le répertoire parent et 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"
tar
commande peut retourner 2
en cas d'erreur fatale.