web-dev-qa-db-fra.com

Comment exclure les chemins absolus pour tar?

J'exécute un script PHP qui me donne les chemins absolus des fichiers que je veux tarer. C'est la syntaxe que j'ai:

tar -cf tarname.tar -C /www/path/path/file1.txt /www/path/path2/path3/file2.xls

Lorsque je le décompresse, cela crée le chemin absolu vers les fichiers. Comment puis-je obtenir juste /path avec tout ce qui se trouve dessous?

35
Angel S. Moreno

Si vous souhaitez supprimer les n premiers composants du nom de fichier, vous avez besoin de strip-components. Donc, dans votre cas, lors de l'extraction,

tar xvf tarname.tar --strip-components=2

La page -man contient une liste de nombreuses options de tar, y compris celle-ci. Certaines versions antérieures de tar utilisent plutôt --strip-path pour cette opération.

50
ire_and_curses

Vous utilisez de manière incorrecte le commutateur -C, utilisé pour modifier les répertoires. Donc, ce que vous devez faire est:

tar -cf tarname.tar -C /www/path path/file1.txt path2/path3/file2.xls

ou si vous voulez tout emballer sous /www/path, faites:

tar -cf tarname.tar -C /www/path .

Vous pouvez utiliser le commutateur -C plusieurs fois.

51
Johnny Baloney

Pour moi, ce qui suit fonctionne le mieux:

tar xvf some.tar --transform 's?.*/??g'

L'argument --transform est une expression rationnelle de remplacement pour sed, à laquelle chaque chemin de fichier extrait est envoyé. Contrairement à --strip-components, il supprimera toutes les informations de chemin, pas seulement un nombre fixe de composants.

10
Roman Saveljev

Si vous ne savez pas combien de composants sont dans le chemin, vous pouvez essayer ceci:

DIR_TO_PACK=/www/path/
cd $DIR_TO_PACK/..
tar -cf tarname.tar $(basename $DIR_TO_PACK)
0
Andreas Baumgart