Es scheint mir, als könnte man beschreiben, wofür Sie sich als "Stream-Editor" interessieren Teer Dateien, mit denen Sie das anwenden können --strip-components
Pfadname-Übersetzung. Die Idee ist, ein zu nehmen Teer Datei als Eingabe und schreibe eine modifizierte Teer Datei als Ausgabe.
Keiner dieser Teer s wer ist die Dokumentation, die ich überprüft habe ( GNU Teer . Star . bsdtar ) scheinen Ihre genaue Operation zu unterstützen.
bsdtar ist aber interessant. Es ist @archive
Es scheint, als würde die Syntax fast dazu führen, dass Sie ein Tarfile lesen und ein modifiziertes schreiben, aber den manpage-Eintrag für --strip-components
sagt, dass es nur in funktioniert x
und t
Modi). Wenn es funktioniert hat c
Modus könnte man so etwas verwenden:
wget -O - <url> | bsdtar -c --strip-components 1 -zf new.tar.gz @-
ich habe nicht bsdtar auf meiner maschine (es ist Teer in FreeBSD , ebenso gut wie Teer in Mac OS X 10.6 (ältere Versionen verwenden GNU Teer ); es ist verfügbar als bsdtar bei einigen Linux-Distributionen: Debian GNU / Linux . Ubuntu , und einige RPM-basierte Distributionen ), aber wenn ich mir den Code ansehe, bin ich sicher, dass der Aufruf nur die Fehlermeldung "Option --strip-components ist im Modus -c nicht erlaubt" verursacht.
Wenn Sie dies wünschen, müssen Sie wahrscheinlich Ihr eigenes Programm rollen (oder jemanden dazu bringen, es für Sie zu erledigen). Glücklicherweise ist dies möglicherweise nicht so schwer, wie es sich anhört. bsdtar basiert auf dem sehr schönen libarchive Bibliothek. Es sieht so aus, als wäre es ziemlich unkompliziert, ein Programm zu erstellen, das macht, was Sie wollen. Schon seit bsdtar Sie haben bereits den größten Teil des Codes, den Sie benötigen, um ein Archiv in ein anderes zu kopieren @archive
Man könnte dies sogar tun, indem Sie einige Funktionen hinzufügen bsdtar . Ein einfacher Ansatz, "verdammt die Architektur, erledigen Sie sie einfach" ist möglicherweise die Aktivierung --strip-components
zum c
Modus und fügen Sie einen Anruf hinzu edit_pathname
Innerhalb append_archive
. Das Problem bei diesem Ansatz ist, dass alle edit_pathname
Transformationen werden auf beide Einträge von angewendet @archive
s und die Pfadnamen der tatsächlichen Dateien, die auf andere Weise angegeben wurden (Befehlszeilenargumente, -T
Pfadnamenlisten usw.). Dieses Verhalten kann im besten Interesse des Beamten liegen oder nicht bsdtar (Es gibt wahrscheinlich einen Grund --strip-components
ist noch nicht für aktiviert c
Modus).