몇 기가바이트와 수천 개의 작은 파일이 포함된 디렉터리가 있습니다. scp를 사용하여 네트워크를 통해 여러 번 복사하고 싶습니다. 원본 및 대상 컴퓨터의 CPU 시간은 저렴하지만 각 파일을 개별적으로 복사하는 데 추가되는 네트워크 오버헤드가 엄청납니다. tar/gzip으로 압축해서 보내려고 하는데 소스 머신에 디스크 공간이 부족합니다.
tar -czf <output> <directory>
출력을 scp로 파이프하는 방법이 있습니까 ? 그렇지 않다면 다른 간단한 해결책이 있습니까? 내 소스 머신이 오래되었으므로(SunOS) 여기에 항목을 설치하고 싶지 않습니다.
답변1
SSH 세션을 통해 tar를 파이프할 수 있습니다.
$ tar czf - <files> | ssh user@host "cd /wherever && tar xvzf -"
답변2
bzip2 압축 Tar를 사용하면 네트워크와 CPU의 부하가 줄어듭니다.
$ tar -C /path/to/src/dir -jcf - ./ | ssh user@server 'tar -C /path/to/dest/dir -jxf -'
화면 출력으로 사용하지 않으면 -v
프로세스 속도가 느려질 수 있습니다. 그러나 자세한 출력을 원한다면 -jcvf
원격 부분이 아닌 tar()의 로컬 부분에서 사용하십시오.
동일한 대상 경로를 반복적으로 복사하는 경우(예: 백업 복사본 업데이트) 가장 좋은 옵션은 압축을 통한 rsync입니다.
$ rsync -az -e ssh /path/to/src/dir/ user@server:/path/to/dest/dir/
src 및 dest 경로는 모두 /로 끝납니다. 다시 말하지만 의도적으로 -v
및 플래그를 사용하지 말고 -P
자세한 출력이 필요한 경우 추가하십시오.
답변3
사용rsync
, SSH를 사용합니다.
용법:
rsync -aPz /source/path destination.server:remote/path
rsync 스위치는 압축 및 I-Node 정보를 관리합니다. -P
각 파일의 진행 상황을 표시합니다.
scp -C
압축을 활성화하는 를 사용할 수 있지만 가능하면 을 사용하십시오 rsync
.
답변4
또는 원하는 경우 반대 방향으로 수행할 수도 있습니다. 이는 제안된 대로 타르볼을 푸시하는 대신 네트워크를 통해 타르볼을 끌어오는 것입니다. 이는 문제의 중복된 부분을 해결하지 못하며 rsync가 최선의 옵션이지만 도움이 될 수 있는 tar 스위치가 있을 수 있습니다.
따라서 로컬 머신에서는 다음과 같습니다.
ssh remote 'tar zcf - /etc/resolv.conf' | tar zxf -
-C
먼저 올바른 디렉터리로 이동하는 것이 가장 좋습니다. 그렇지 않으면 마지막에 uning 명령에서 스위치를 사용해야 합니다 .tar
필요할 때 이것을 언급하십시오. 제 경우에는 로컬 서버가 nat 뒤에 있었기 때문에 이것은 저에게 효과적이었습니다. 그래서 앞서 언급한 방식으로 이를 수행하려면 일부 네트워크 테스트가 필요했습니다.