네트워크를 통해 아카이브를 추출하는 방법

네트워크를 통해 아카이브를 추출하는 방법

두 대의 Solaris 서버가 있습니다. server1에 파일이 있습니다 archive.tar.gz. 파일을 추출하려면 server2로 ssh해야 합니다.

그래서 다음 명령을 작성합니다.

ssh server2 < archive.tar.gz | gunzip -c | tar -xf - -C /home/

하지만 오류가 발생합니다.

stdin이 터미널이 아니기 때문에 의사 터미널은 할당되지 않습니다.

파일을 올바르게 복사하는 방법은 무엇입니까?

답변1

나는 당신이 다음과 같은 일을 할 수 있다고 믿습니다 :

$ cat archive.tar.gz | ssh server2 "tar zxvf -"

server2에서 추출되는 디렉토리를 제어해야 하는 경우:

$ cat archive.tar.gz | ssh server2 "cd /path/to/dir; tar zxvf -"

솔라리스

귀하는 Solaris를 사용하고 있으므로 귀하의 tar 버전에는 GNU tar에서 제공하는 압축 기능이 포함되어 있지 않을 수 있습니다. 걱정하지 마십시오. 이 명령을 계속 실행할 수 있습니다. archive.tar.gz먼저 타르볼의 압축을 풀 수 있는 명령 으로 cat을 분해하면 됩니다 .

다음과 같이 해야 합니다.

$ cat archive.tar.gz | ssh server2 "(cd /some/dir; gunzip | tar xf -)"

아니면 이거:

$ gzip -dc < sample.tar.gz | ssh server2 "cd /path/to/dir; tar xvf -"

아니면 이거:

$ gunzip sample.tar.gz | ssh server2 " cd /path/to/dir; tar xvf -"

답변2

ssh server2 < archive.tar.gz

어떤 명령도 전달하지 않으므로 ssh원격 측에서 쉘을 실행합니다. 의 내용은 archive.tar.gz표준 입력을 통해 쉘에 전달되므로 이를 쉘 스크립트로 구문 분석하려고 시도합니다. 유쾌함을 유발하는지 여부는 파일 내용에 따라 다릅니다.

이러한 명령을 실행하는 위치가 설명에서 명확하지 않습니다. server1에 있고 archive.tar.gzserver2에서 아카이브를 추출하려면 아카이브를 server2로 파이프하고 거기에서 extract 명령을 실행하십시오.

<archive.tar.gz ssh server2 'cd /home && gunzip | tar -xf -'

또는 server2에 로그인하여 server1의 파일 시스템을 마운트합니다.sshfs를 클릭한 다음 로컬 파일처럼 아카이브의 압축을 풉니다.

mkdir /tmp/server1
sshfs server1:/ /tmp/server1
cd /home
gunzip </tmp/server1/path/to/archive.tar.gz | tar -xf -
fusermount -u /tmp/server1

답변3

cd다음과 같은 명령을 사용하지 않고도 아카이브를 기존의 특정 디렉터리로 확장할 수 있습니다 .

$ cat archive.tar.gz | ssh server2 "tar zxvf - -C /path/to/dir"

디렉터리가 존재하는지 모르는 경우 다음 명령을 사용할 수 있습니다.

$ cat archive.tar.gz | ssh server2 "mkdir -p /path/to/dir && tar zxvf - -C /path/to/dir"

관련 정보