단일 파일을 RSYNC하는 방법은 무엇입니까?


95

현재 나는 다음 Directories과 같이 RSync-ing합니다 .

* * * * * rsync -avz /var/www/public_html/images root@<remote-ip>:/var/www/public_html

그래서 rsync하나의 단일 파일은 /var/www/public_html/.htaccess어떻게합니까?

답변:


160

디렉토리와 동일한 방식으로 수행하지만 파일 이름에 대한 전체 경로를 소스로 지정합니다. 귀하의 예에서 :

rsync -avz   --progress  /var/www/public_html/.htaccess root@<remote-ip>:/var/www/public_html/

19
또한 하나의 파일 만 보내는 경우 "--progress"매개 변수를 추가하여 진행 상황을 볼 수 있습니다.
JoshStrange 2014

이것은 rsyncd.conf에 파일 위의 디렉토리가있는 모듈이 여전히 필요하다는 것을 의미합니까 (예 : 거부 옵션 삭제 사용), 아니면 경로를 지정하여 서버의 아무 곳에 나 파일을 업로드 할 수 있습니까? 매뉴얼 페이지는 그것에 대해 명확하지 않습니다.

2
-a에는 재귀가 포함되어 있으며 실수로 파일 이름이 디렉토리가되면 의도하지 않은 동작으로 이어질 수 있으므로 단일 파일에 대해 해당 플래그를 사용할지 확실하지 않은 단일 파일에는 필요하지 않습니다.
redanimalwar

2
--partial --stats --progress <<이 플래그는 파일이 정말 큰 경우에 유용하며 전송이 중단 된 후 다시 시작해야 할 수 있습니다.
Ahi Tuna

16

기본 구문

rsync options source destination

rsync -az /var/www/public_html/filename root@<remote-ip>:/var/www/public_html

더 읽어보기


14

Michael Place의 대답은 소스 및 대상의 루트 디렉토리에 비해 파일 경로의 모든 디렉토리가 이미 존재하는 경우 훌륭하게 작동합니다.

그러나 파일을이 소스 경로와 동기화하려면 어떻게해야합니까?

/ source-root / a / b / 파일

다음 대상 경로를 가진 파일에 :

/ target-root / a / b / 파일

그리고 디렉토리 ab 가 존재하지 않습니까?

다음과 같은 rsync 명령을 실행해야합니다.

rsync -r --include="/a/" --include="/a/b/" --include="/a/b/file" --exclude="*" [source] [target]

2
개별 파일을 기존 폴더에 복사하거나 미리 폴더를 만드는 것이 더 안전하지 않을까요? 폴더 또는 폴더 콘텐츠 동기화의 경우 rsync가 모든 하위 폴더를 생성 해 보겠습니다. 모든 작업이 완료되었지만이 경우에는 개별 파일을 복사하기 위해 --include 매개 변수가 너무 번거롭고 까다 롭습니다.
Tulains Córdova

@ user1598390 어떤 시나리오를 가정하거나 상상하고 있는지 잘 모르겠지만이 명령의 특정 형식을 기억하려고했지만 자주 수행하지 않았다면 아마도 그렇습니다 단일 파일을 복사하는 것보다 덜 안전합니다. 파일이 크면 더 안전 할 수 있습니다. 즉, rsync가 복사 중에 발생할 수있는 대부분의 오류를 자동으로 처리하기 때문입니다. 어떤 상황에서는이 형식으로 명령을 생성하는 코드를 작성했기 때문에 구문이 특히 유용했습니다. 따라서 관련 코드를 다루는 충분한 테스트가 주어지면 이러한 명령은 '안전'합니다.
Kenny Evitt

0

현재까지 두 가지 답변이 정확하지 않고 하나 이상의 파일을 받게되며 다른 하나는 가능한 한 간단하지 않습니다. 여기에 더 간단한 답변 IMO가 있습니다.

다음은 정확히 하나의 파일을 가져 오지만 mkdir로 dest 디렉토리를 만들어야합니다. 이것은 아마도 가장 빠른 옵션 일 것입니다.

mkdir -p ./local/path/to/file
rsync user@remote:/remote/path/to/file/ -zarv --include "filename" --exclude "*" ./local/path/to/file/

/ remote / path에 파일 인스턴스가 하나만있는 경우 다음을 수행하면 rsync가 디렉토리를 생성 할 수 있습니다. 더 많은 디렉토리를 검색하기 때문에 시간이 좀 더 걸릴 수 있습니다. 또한 ./local에없는 / remote / path에있는 디렉토리에 대해 빈 디렉토리를 생성합니다.

cd ./local
rsync user@remote:/remote/path -zarv --include "*/" --include "filename" --exclude "*" .

--include 및 --exclude의 순서가 중요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.