Comment exclure les chemins absolus pour tar?

Je lance un script PHP qui me fournit les chemins absolus des fichiers que je veux créer. 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, il crée le chemin absolu vers les fichiers. Comment puis-je juste /path avec tout ce qui est sous lui pour montrer?

Si vous souhaitez supprimer les n premiers composants principaux du nom de fichier, vous avez besoin ssortingp-components . Donc, dans votre cas, sur l’extraction, faire

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

La page de manuel contient une liste des nombreuses options de tar , y compris celle-ci. Certaines versions antérieures de tar utilisent --ssortingp-path pour cette opération.

Vous utilisez incorrectement le commutateur -C , qui est utilisé pour changer de répertoire. Donc, ce que vous devez faire c’est:

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

ou si vous voulez tout emballer sous /www/path do:

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

Vous pouvez utiliser le commutateur -C plusieurs fois.

Pour moi, ce qui suit fonctionne le mieux:

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

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

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

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