Antworten:
Der nächste, den ich finden kann, ist die --transformOption. Ich weiß es nicht genau, aber ich vermute, dass dies nur eine GNU-Flagge ist:
--transform, --xform EXPRESSION
use sed replace EXPRESSION to transform file names
Mit diesem können Sie einen sedErsetzungsbefehl übergeben und Folgendes ändern /in /abc:
tar cf root.tgz --transform 's/^\//\/abc/' /
Dadurch werden /beim Erstellen des Archivs weiterhin Pfade gedruckt , diese werden jedoch /abcbeim Extrahieren erstellt.
Ein anderer Ansatz, wenn Sie tarnicht die --transformOption haben, besteht darin, /abceinen Symlink zu erstellen, der auf Folgendes verweist, /und dann Folgendes zu tun:
$ ln -s / /abc
$ tar chf root.tgz /abc
Das -hist wichtig, da dies bedeutet, tarLinks zu folgen:
-h, --dereference
follow symlinks; archive and dump the files they point to
Dadurch wird das /abcVerzeichnis der obersten Ebene festgelegt.
Mit GNU tar können Sie diesen Befehl verwenden:
tar --transform="s|/|/abc/|" -Pcf bar.tar /
Andernfalls ist hier eine tragbare Methode, dh eine, die nicht auf einer GNU oder einer anderen spezifischen Tar-Erweiterung basiert, sondern auf einem POSIX-Tool basiert, das auf jedem Unix-kompatiblen Computer verfügbar sein sollte:
pax -w -s '/\//\/abc\//' -f foo.tar /
Hier ist, wie ich es gemacht habe, was zum Teern von jedem Ort aus funktioniert (nicht nur /):
tar --transform 's|^|/abc/|' -zcvf /path/to/dest.tgz *
Es wird einfach ein /abc/an den Anfang jedes Pfades angehängt .
tar: Removing leading / from member names. Die Verwendung's|^|abc/|'hat bei mir gut funktioniert.