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?
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.
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.
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.
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)