Wie kann man einen anderen "Top Level" -Namen für Teer angeben?

10

Ich möchte tar root (/) und es als / abc im tar-Archiv erscheinen lassen.

Gibt es ein Teer-Flag zum Angeben eines benutzerdefinierten Namens der obersten Ebene?

Howard
quelle

Antworten:

6

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.

terdon
quelle
2

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 /
jlliagre
quelle
1

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 .

Zane Hooper
quelle
1
Beim Extrahieren eines auf diese Weise erstellten Archivs wird eine Warnung angezeigt tar: Removing leading / from member names. Die Verwendung 's|^|abc/|'hat bei mir gut funktioniert.
Michael Platings