Antworten:
Der nächste, den ich finden kann, ist die --transform
Option. 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 sed
Ersetzungsbefehl ü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 /abc
beim Extrahieren erstellt.
Ein anderer Ansatz, wenn Sie tar
nicht die --transform
Option haben, besteht darin, /abc
einen Symlink zu erstellen, der auf Folgendes verweist, /
und dann Folgendes zu tun:
$ ln -s / /abc
$ tar chf root.tgz /abc
Das -h
ist wichtig, da dies bedeutet, tar
Links zu folgen:
-h, --dereference
follow symlinks; archive and dump the files they point to
Dadurch wird das /abc
Verzeichnis 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.