it-swarm-korea.com

scp가 디렉토리를 재귀 적으로 복사 할 수 있습니까?

현재 단일 .tar 파일 만 복사 할 수 있습니다. 그러나 scp를 사용하여 디렉토리를 재귀 적으로 복사하는 방법은 무엇입니까?

610
kernel

예, -r :

scp -rp sourcedirectory [email protected]:/path
  • -r은 재귀를 의미
  • -p는 원본 파일의 수정 시간, 액세스 시간 및 모드를 유지합니다.

참고 : sourcedirectory 안에 /path 따라서 파일은 /path/sourcedirectory

981
dmourati

이전 답변은 기술적으로 정확하지만 대신 rsync 사용을 고려해야합니다. rsync는 송신 및 수신 측의 데이터를 diff 메커니즘과 비교하므로 이전에 전송 된 데이터를 다시 보낼 필요가 없습니다.

원격 시스템에 무언가를 두 번 이상 복사하려면 rsync를 사용하십시오. 실제로 rsync는 파일 권한 및 소유권 복사 및 특정 파일 또는 디렉토리 제외와 같은 항목에 대한 제어 기능이 많으므로 매번 사용하는 것이 좋습니다. 일반적으로 :

$ rsync -av /local/dir/ server:/remote/dir/

로컬 디렉토리를 원격 디렉토리와 동기화합니다. 두 번째로 실행하고 로컬 디렉토리의 내용이 변경되지 않은 경우 scp를 실행하고 매번 모든 것을 복사하는 것보다 훨씬 효율적인 데이터가 전송되지 않습니다.

또한 rsync를 사용하면 scp와 달리 중단 된 전송을 매우 쉽게 복구 할 수 있습니다.

마지막으로, rsync의 최신 버전은 기본적으로 ssh를 통해 실행되므로 scp이 이미 작동중인 경우 rsync은 대체로 대체해야합니다.

177
Phil Hollenback

그게 -r 옵션입니다. :)

필요한 경우 자세한 내용은 scp 매뉴얼 페이지 를 참조하십시오.

34
HedgeMage

재귀 복사 옵션 '-r'(소문자)

scp -r

일반 로컬 재귀 복사 옵션 '-R'(대문자)과 혼동되는 부분

cp -R
12
Tarun

가장 좋은 방법은 SSH를 통한 rsync를 사용하는 것입니다

rsync -a -essh /source/ [email protected]:/dest/

rsync -a -essh [email protected]:/source/ /dest/

내가 가장 좋아하는 옵션은 -Pazvessh --delete입니다.

  • -a : 아카이브 모드
  • -z : 압축
  • -v : 상세 : 파일 표시
  • -P : 파일이 완료/남은 파일로 진행 표시
  • -e ssh : ssh 프로토콜에서 rsync를 수행
  • --delete : 대상에서 더 이상 소스에없는 파일을 삭제합니다.
7
mick

재귀 복사 플래그를 찾아서이 게시물 덕분에 성공적으로 사용한 후 제안 사항을 게시하고 싶습니다.

디렉토리를 (재귀 적으로) 복사하는 경우입니다. 파일이 압축 된 상태로 전송되면 전송 시간을 절약 할 수 있습니다.

내가 결국 한 일은 :

local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz [email protected]:/directory
ssh [email protected]
remote$ tar -xzvf local.tar.gz

도움이 되었기를 바랍니다

4
user9869932

이 간단한 명령을 사용하여 디렉토리를 압축 된 아카이브로 재귀 적으로 복사 할 수 있습니다.

ssh -p 22 [email protected]  'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz

예를 들어 /var/log의 내용을 domain.com에서 ~/logs.tgz로 복사하려면 다음을 실행하십시오.

ssh -p 22 [email protected]  'cd /var && tar zcvf - log' > ~/logs.tgz

파이프를 사용하여 대상 시스템에서 파일을 추출 할 수도 있습니다. 이 명령은 시스템의 /var/log에서 domain.com의 내용을 ~/destination/log에 복사합니다.

ssh -p 22 [email protected]  'cd /var && tar zcvf - log' | tar xzf - -C ~/destination

디렉토리를 미러링하지만 rsync...를 사용해야합니다.

2
Anubioz

사용자의 비밀번호를 대화식으로 입력하지 않고 매개 변수로 전달하려면 sshpass (Sudo apt-get install -y sshpass).

예:

sshpass -p 'remote_password' scp -rp /src/folder [email protected]:/dest/folder
1

Scr 명령과 함께 -r 옵션을 사용하여 모든 시스템에서 디렉토리를 재귀 적으로 복사 할 수 있습니다. 다른 것이 필요하면 scp command tutorial 을 참조하십시오. -r 옵션은 대부분의 Linux 명령에서 재귀 작업을 나타냅니다.

0
atthik