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/logdomain.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.