scp e descomprima o arquivo ao mesmo tempo sem salvá-lo

2

Eu tenho procurado por uma resposta, mas nada que eu tenha encontrado funcionou.

Há um arquivo tar que estará em um cd em um servidor diferente que eu preciso transferir para o meu servidor e descompactar tudo ao mesmo tempo sem um salvamento intermediário. o tar tem vários arquivos e eles podem ser desconhecidos.

Como posso fazer isso no meu servidor ou no outro servidor?

Eu explorei isso com scp, usando tar e ssh, e tentei descobrir com o rsync.

qualquer ajuda é apreciada

    
por scarlso9 28.09.2016 / 21:00

2 respostas

3

No sistema de destino (onde os arquivos serão extraídos):

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

OR

Do servidor de origem (onde o arquivo tar está localizado):

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

Abaixo, há algumas alternativas para brincar (no sistema alvo), apenas para mostrar maneiras mais extravagantes que você pode achar interessante.

scp e substituição do processo bash (se disponível):

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

scp e /proc/self (se disponível):

cd /target/dir && scp user@source_server:/path/to/your/file.tar /proc/self/fd/1 | tar -x
    
por 28.09.2016 / 21:55
0

Isso pressupõe que seu arquivo é um arquivo TAR. Não assume que o arquivo TAR esteja compactado. Comandos / opções podem variar se o arquivo de origem for realmente algo diferente de um arquivo TAR padrão.

Se você tiver um arquivo tar no sistema de origem, tente o seguinte:

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

Observe as opções corretas no comando tar . x para extrair o tar, v para verbose (opcional), f para especificar um arquivo (em oposição a um dispositivo de fita). Você precisa do - no final, pois isso irá tar STDIN como a entrada para o comando tar. O comando tar precisa acontecer dentro das cotas para o comando SSH, portanto, o tar ocorre no host de destino e não no host local.

No servidor de destino, altere um pouco a sintaxe:

cd /target/dir
ssh user@source_host "cat /source/dir/somefile.tar" | tar xvf -
    
por 28.09.2016 / 23:39