rsync를 사용 하여 양방향으로 두 디렉터리 를 동기화 하고 싶습니다 .
나는 고전적인 의미 (의 동기화를 참조 하지 가 rsync를 매뉴얼에서 의미하는 방법) :
내가 디렉토리를 업데이트 할 두 방향 중 어느가에 따라, 새로운 .
rsync (리눅스 방식에서 선호 됨)로이 작업을 수행 할 수 있습니까 ?
그렇지 않은 경우 어떤 다른 솔루션이 있습니까?
rsync를 사용 하여 양방향으로 두 디렉터리 를 동기화 하고 싶습니다 .
나는 고전적인 의미 (의 동기화를 참조 하지 가 rsync를 매뉴얼에서 의미하는 방법) :
내가 디렉토리를 업데이트 할 두 방향 중 어느가에 따라, 새로운 .
rsync (리눅스 방식에서 선호 됨)로이 작업을 수행 할 수 있습니까 ?
그렇지 않은 경우 어떤 다른 솔루션이 있습니까?
답변:
"최신"모드 (-u 또는 --update 플래그)와 -t (파일 수정 시간 복사), -r (재귀 폴더의 경우) 및 -v (상세 출력의 경우)를 사용하여 두 번 실행하면됩니다. 하기):
rsync -rtuv /path/to/dir_a/* /path/to/dir_b
rsync -rtuv /path/to/dir_b/* /path/to/dir_a
이것은 삭제를 처리하지 않지만주기적인 동기화만으로 그 문제에 대한 좋은 해결책이 있는지 확신하지 못합니다.
Unison File Synchronizer 를 알고 계십니까?
Unison은 Unix 및 Windows 용 파일 동기화 도구입니다. 파일 및 디렉토리 모음의 두 복제본을 서로 다른 호스트 (또는 동일한 호스트의 서로 다른 디스크)에 저장하고 개별적으로 수정 한 다음 각 복제본의 변경 사항을 다른 복제본에 전파하여 최신 상태로 가져올 수 있습니다. ...
또한 장애에 대해 탄력적입니다.
Unison은 실패에 탄력적입니다. 비정상적인 종료 또는 통신 실패의 경우에도 복제본과 자체 개인 구조를 항상 합리적인 상태로 두도록주의해야합니다.
당신은 실행해야 rsync
두 번 나는 그것을 실행하는 것이 좋습니다 -au
:
rsync -au /local/source/* /remote/destination
rsync -au /remote/destination/* /local/source
-a
(a for archive)는 다음에 대한 바로 가기입니다 -rlptgoD
.
-r
하위 디렉토리로 재귀-l
심볼릭 링크도 동기화-p
파일 권한도 동기화-t
또한 파일 수정 시간 동기화-g
파일 그룹도 동기화-o
파일 소유자도 동기화-D
특수 (일반 / 메타 아님) 파일도 동기화기본적으로를 사용하여 동일한 일대일 사본을 만들려면 rsync
항상 -a
" 동기화 " 에 대해 이야기 할 때 대부분의 사용자가 예상 하는 대로 사용해야 합니다. 여기에 다른 답변은 때때로 파일의 내용이 변경되지 않았지만 소유자가 변경되었거나 액세스 권한이 변경 rsync
되었을 수 있으며이 경우 치명적인 파일을 동기화하지 않을 수 있다는 것을 간과하는 것 같습니다 .
그러나 파일 / 폴더가 이미 대상에 있고 최신 수정 날짜가있는 경우 파일 / 폴더를 완전히 남겨 두라 -u
는 메시지도 표시해야 rsync
합니다. 하지 않고는 -u
rsync
동기화 할 파일 / 폴더가 최신인지 아닌지에 관계없이 .
이 솔루션은 삭제 된 파일을 처리 할 수 없습니다. 다음 상황을 고려하면 삭제 처리가 쉽게 불가능합니다. 파일이 소스에서 삭제되었습니다. 이제 rsync
해당 파일이 한 번 존재하고 삭제되었는지 (이 경우 대상에서도 삭제되어야 함) 여부를 어떻게 알 수 있습니까? 소스에 존재하지 않았습니다 (이 경우 대상에서 복사해야 함). 이 두 상황은 동일 해 보이 rsync
므로 올바르게 반응하는 방법을 알 수 없습니다. 동일한 상황으로 이어질 수 있으므로 다른 방식으로 동기화하는 것은 도움이되지 않습니다. 파일이 소스에 있지만 대상에는 없습니다. 왜? 목적지에 존재하지 않았거나 삭제 되었습니까? 두 경우 모두 rsync
.
삭제 된 파일을 안정적으로 동기화 할 수있는 동기화 도구는 일반적으로 모든 이전 동기화 작업에 대한 동기화 로그를 관리합니다. 해당 로그에 한 번 파일이 있고 동기화되었지만 지금은 누락되었다고 표시되면 삭제 된 것입니다. 로그에 따르면 이러한 파일이 없었 으면 동기화해야합니다. 타임 스탬프와 함께 모든 로그 항목을 저장하면 삭제 된 파일이 다시 돌아와 여러 번 삭제 될 수도 있지만 동기화 도구는 항상 수행 할 작업을 알고 결과는 항상 정확합니다. rsync
이러한 로그가 없으며 작업의 양면에 대한 현재 파일 상태에만 의존합니다.
그러나 rsync
위에서 설명한대로 동기화 도구에 이미 매우 근접한 약간의 POSIX 쉘 스크립팅을 사용하여 동기화 명령을 직접 빌드 할 수 있습니다 . 이러한 도구가 필요했기 때문에 이러한 스크립트를 만드는 과정을 안내 하는 Stackoverflow에 대한 답변 이 있습니다.
감사합니다 jsight
rsync -urv --progress dir_a dir_b && rsync -urv --progress dir_b dir_a
이로 인해 첫 번째 동기화가 끝난 직후 두 번째 동기화가 수행됩니다. 디렉토리 구조가 큰 경우 PC 앞에 앉을 필요가 없기 때문에 시간이 절약됩니다. 구조가 거대하면 장황하고 진행되는 것을 제거하십시오.
rsync -ur dir_a dir_b && rsync -ur dir_b dir_a
&&
두 명령 사이 를 사용 하여 첫 번째 명령이 성공한 경우 즉시 두 번째 명령을 자동으로 실행할 수 있음을 보여주는 것으로 보입니다. @jsight의 답변에서. 또한 -t
이 답변이 게시 된 후 @jsight의 답변이 옵션 을 포함하도록 편집되었다고 생각 합니다.
사용하다 rsync <OPTIONS> [hostname:]source-dir [hostname:]dest-dir
예를 들면 :
rsync -pogtEtvr --progress --bwlimit=2000 xxx-files different-stuff
xxx-files를 different-stuff / xxx-files로 동기화합니다. different-stuff / xxx-files가 존재하지 않으면 생성합니다.
-pogtEtv
-파일 메타 데이터를 보존하기위한 다양한 옵션과 v-verbose 및 r-재귀
--progress
-실시간 동기화 진행률 표시-대용량 파일 복사시 매우 유용
--bwlimit=2000
-복사 / 동기화의 최대 속도 설정 (bw = 대역폭)
PS rsync는 로컬 컴퓨터의 경우 cp 와 같은 명령을 사용할 수있는 네트워크를 통해 작업 할 때 매우 중요합니다 .
행운을 빕니다!
내가 사용하고 rsync
와 inotifywait
. 파일을 변경 rsync
하면이 실행됩니다.
inotifywait -m --exclude "$_LOG_FILE" -r -e create,delete,delete_self,modify,moved_to --format "%w%f" "$folder"
inotifywait
두 호스트 모두에서 실행해야합니다 . inotifywait 예를 확인하십시오
필요한 것은 Rclone 입니다. Rclone ( "클라우드 스토리지 용 rsync")은 다른 클라우드 스토리지 제공 업체 (box, dropbox, ftp 등) 및 로컬 파일 시스템간에 파일 및 디렉토리를 동기화하는 명령 줄 Linux 프로그램입니다. Rlone은 미러 동기화 만 지원합니다.
실시간 동기화를 포함하는 또 다른 그래픽 솔루션은 RealTimeSync 프로그램이 포함 된 FreeFileSync 를 사용하는 것 입니다. FreefileSync는 삭제 처리를 포함하는 양방향 양방향 동기화를 지원합니다.