scp를 통해 많은 수의 작은 파일을 복사하는 가장 좋은 방법은 무엇입니까?

scp를 통해 많은 수의 작은 파일을 복사하는 가장 좋은 방법은 무엇입니까?

몇 기가바이트와 수천 개의 작은 파일이 포함된 디렉터리가 있습니다. 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 뒤에 있었기 때문에 이것은 저에게 효과적이었습니다. 그래서 앞서 언급한 방식으로 이를 수행하려면 일부 네트워크 테스트가 필요했습니다.

관련 정보