scp i rozpakuj plik w tym samym czasie bez zapisywania go

2

Szukałem odpowiedzi, ale nic, co znalazłem, nie zadziałało.

Jest plik tar, który znajduje się na dysku CD na innym serwerze, który muszę przenieść na mój serwer i jednocześnie zdekompresować go bez pośredniego zapisu. tar ma wiele plików i mogą być nieznane.

Jak mogę to zrobić z mojego serwera lub z innego serwera?

Eksplorowałem to za pomocą scp, używając tar i ssh, i próbowałem dowiedzieć się z rsync ..

wszelka pomoc jest doceniana

scarlso9
źródło
tar nie jest kompresorem, więc nie można rozpakować pliku tar. Wyodrębniasz z niego pliki.
Kamil Maciorowski

Odpowiedzi:

3

W systemie docelowym (gdzie pliki zostaną wyodrębnione):

cd /target/dir && ssh user@source_server "cat /path/to/your/file.tar" | tar -xvv

LUB

Z serwera źródłowego (gdzie znajduje się plik tar):

ssh user@target_system "cd /target/dir && tar -xvv" < /path/to/your/file.tar

Poniżej znajduje się kilka alternatyw do zabawy (w systemie docelowym), aby pokazać bardziej interesujące sposoby, które mogą Cię zainteresować.

scp i zastąpienie procesu bash (jeśli jest dostępny):

scp user@source_server:/path/to/your/file.tar >(cd /target/dir && tar -x)

scp i /proc/self (Jeśli możliwe):

cd /target/dir && scp user@source_server:/path/to/your/file.tar /proc/self/fd/1 | tar -x
Kamil Maciorowski
źródło
0

Zakłada się, że twój plik jest archiwum TAR. Nie zakłada, że ​​archiwum TAR jest spakowane. Polecenia / opcje mogą się różnić, jeśli plik źródłowy jest w rzeczywistości czymś innym niż standardowe archiwum TAR.

Jeśli masz plik tar w systemie źródłowym, spróbuj wykonać następujące czynności:

cd /source/dir
cat somefile.tar | ssh user@target_host "cd /target/dir; tar xvf -"

Zwróć uwagę na prawidłowe opcje na tar dowództwo. x wydobyć smołę, v na gadatliwy (opcjonalnie), f określić plik (w przeciwieństwie do urządzenia taśmowego). Potrzebujesz - na końcu, ponieważ będzie to tarło STDIN jako danych wejściowych dla polecenia tar. Polecenie tar musi się odbywać w cudzysłowie dla polecenia SSH, więc tar ma miejsce na hoście docelowym, a nie na hoście lokalnym.

Z serwera docelowego zmień nieco składnię:

cd /target/dir
ssh user@source_host "cat /source/dir/somefile.tar" | tar xvf -
MikeA
źródło