einige Mitglieder aus dem tar-Archiv extrahieren und über das Netzwerk leiten

4576
Felipe Alvarez

edit: ich will extra member01und member02und verzeichnisblah/

tarball_1.tar.gzenthält ein Verzeichnis test/mit 20 Dateien. Ich möchte nur member test/member01und test/member02und directory extrahieren und blah/mit ssh / scp in einen anderen "remote_host" kopieren.

Kann man dies als Einzeiler machen? Ich dachte über die Verwendung nach tar, paxoder cpioich schätze, ich bin mit diesen Dienstprogrammen noch nicht sehr vertraut.

9

1 Antwort auf die Frage

15
atanamir
tar -xzOf file.tar.gz file_you_want_to_extract | ssh user@host 'cat > /path/to/destination_file' 
  • -x : Extrakt
  • -z : Durch gzip
  • -f : Nehmen Sie eine Datei als Eingabe auf.
  • -O : Extrahieren zu stdout

Der file_you_want_to_extractwird aus file.tar.gzder Standardausgabe extrahiert und in die Pipeline geleitet ssh, die catauf dem Remote-Host ausgeführt wird und seinen Standard in die Remote schreibt destination_file. Natürlich möchten Sie sicherstellen, dass Sie über die Schreibberechtigung für Ihre gewünschte Zieldatei auf dem Remote-Host verfügen.

Ich war mir in meinem ursprünglichen Posting nicht klar :) Ich muss mehr als ein Mitglied plus ein Verzeichnis extrahieren. Felipe Alvarez vor 12 Jahren 0
sollte tar -xz0f sein: nach 'f' kommt Archivname Felipe Alvarez vor 12 Jahren 0
Das Extrahieren mehrerer Mitglieder wird unübersichtlich, wenn Sie möchten, dass sie einzeilig sind, da das Extrahieren mehrerer Dateien nach stdout keinen Sinn macht. Sie müssen wahrscheinlich für jeden, den Sie extrahieren möchten, "tar" verwenden, und dann "scp -r member1 member2 blah user @ host: / destination / folder /" verwenden, um sie zu kopieren. Wenn Sie es wirklich einzeilig machen möchten, können Sie alle diese Befehle mit `&&` verketten. Eine praktischere Option ist es, nur ein Skript zu erstellen, das die Befehlszeilenoptionen durchläuft und für jedes ein "tar" ausführt und am Ende alle `scp '. atanamir vor 12 Jahren 1
Ahhhhh, ich verstehe. Es gibt also keine "einfache" Einliner-Methode. Vielen Dank :-) Felipe Alvarez vor 12 Jahren 0
Wenn "one-liner" wichtiger ist als "wie lange es dauert", können Sie alternativ das gesamte Archiv durch ssh leiten und die gewünschten Elemente auf der anderen Seite extrahieren. "Cat file.tar.gz | ssh user @ host" tar zxvf file1 file2 dir1 ' Colin vor 9 Jahren 2