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


572

현재 단일 .tar파일 만 복사 할 수 있습니다 . 그러나 어떻게 재귀 적으로 디렉토리를 복사 할 수 scp있습니까?

답변:


935

그래, 사용 -r:

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

참고 : 이것은 sourcedirectory내부 /path를 생성 하므로 파일은/path/sourcedirectory


9
그러나 이것이 심볼릭 링크를 유지하지는 않습니다.
— CpnCrunch

12
참고 -pr아니라 대상 디렉토리 (옵션 사항 분명히, 순서)에 콘텐츠를 폴더를 복사하지 않습니다 (역순 옵션), 가시.
— pms

171

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

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

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

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

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

마지막으로, rsync기본적 으로 최신 버전은 ssh를 통해 실행되므로 scp이미 작동하는 경우 rsync대체 대체품이 될 것입니다.


1
나는 rsync더 효율적 이라는 데 동의합니다 . 현재 수행하지 않는 한 가지는 scp원격 호스트 간 복사를 허용하는 것입니다 (적어도 rsync 클라이언트를 실행하지 않고).
— Cedric Knight

1
-av: v는 상세 정보, 아카이브 용이며 -rlptgoD의 바로 가기이며 재귀 적이며 권한 소유자 날짜 및 링크를 유지합니다. 재귀 적 사용만을 원한다면-r
— pdem



6

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

rsync -a -essh /source/ user@dest-server:/dest/

rsync -a -essh user@source-server:/source/ /dest/

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

  • -a : 아카이브 모드 (심볼 링크 보존을 포함하여 많은 기본 공통 옵션 포함)
  • -z : 압축
  • -v : 상세 : 파일 표시
  • -P : 파일이 완료 / 남은 파일로 진행 표시
  • -e ssh : ssh 프로토콜에서 rsync를 수행
  • --delete : 대상에서 더 이상 소스에없는 파일을 삭제합니다.

rsync내가 사용한 모든 버전은 ssh기본적으로 사용 되므로 -essh필요하지 않을 것입니다. 그리고 원격 호스트에 연결하는 데 사용되는 명령의 선택은 실제로 재귀 적으로 복사하는 것과 관련이 없습니다.
— kasperd

4

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

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

내가 결국 한 일은 :

local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz

도움이 되었기를 바랍니다


파일 확장자 중 하나를해야 .tar.gz하거나 .tgz파일이 gzip으로 압축 된 tar 아카이브이기 때문에합니다 (이후 -z플래그가 사용된다).
— anthonybell

2

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

ssh -p 22 user@address-to-copy-from.com  'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz

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

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' > ~/logs.tgz

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

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' | tar xzf - -C ~/destination

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


1

사용자 비밀번호를 대화식으로 입력하지 않고 매개 변수로 전달하려는 경우 sshpass( sudo apt-get install -y sshpass)를 사용할 수 있습니다 .

예:

sshpass -p 'remote_password' scp -rp /src/folder myremoteusername@122.10.12.123:/dest/folder

0

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


사실이지만, -r옵션은 이미 몇 년 전에 제안되었으며 허용되는 답변입니다.
— RalfFriedl

-3

또 다른 (반복적으로 사용하는 것이 좋을 수도 있음) 옵션은 NFS를 사용하는 것입니다-nfs-kernel-server 및 NFS 공유 설정 방법을 확인하십시오.


2
이건 말도 안돼 당신이 사용하는 끝없는 경우가 scp있지만 NFS는 옵션이 아닙니다.
— Sven
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.