[bash] 두 폴더를 자동으로 동기화하는 방법은 무엇입니까?

한 폴더의 모든 하위 트리와 동기화 된 복사본을 갖고 싶습니다.

이 방식으로 자동으로 작동합니다. 원본 폴더에서 항목을 생성, 수정 또는 삭제할 때마다 해당 변경 사항이 동기화 폴더에 자동으로 적용되어야합니다.

이 작업에 대한 최선의 접근 방식은 무엇입니까?

BTW : 저는 Ubuntu 12.04에 있습니다.

최종 목표는 심볼릭 링크 나 마운트를 사용하지 않고 별도의 실시간 백업 복사본을 만드는 것입니다. 컴퓨터간에 데이터를 동기화하기 위해 Ubuntu One을 사용했는데 잠시 후 문제가 발생하여 동기화 중에 모든 데이터가 손실되었습니다.

그래서 내 데이터의 백업 사본을 유지하기 위해 한 단계 더 추가하려고 생각했습니다.

  • 데이터를 “폴더 A”에 보관합니다.
  • “폴더 A”와 “폴더 B”의 단방향 동기화를 만들려면 현재 질문에 대한 답변이 필요합니다 ( ?가 cron있는 스크립트는 rsync? 일 수 있음). A에서 B로만 단방향이어야합니다. B에 대한 변경 사항은 A에 적용되지 않아야합니다.
  • 나는 단순히 “폴더 B”를 Ubuntu One과 동기화 된 상태로 유지합니다

    . 이런 방식으로 A의 모든 변경 사항은 B에 적용되며 U1에서 감지되어 클라우드에 동기화됩니다. 문제가 발생하고 U1이 B에서 내 데이터를 삭제하면 항상 A에 있습니다.

lanzz의 의견에서 영감을 얻은 또 다른 아이디어는 시작시 rsync를 실행하여 Ubuntu One 아래의 폴더 내용을 백업하고 rsync가 완료된 후에 만 ​​Ubuntu One을 시작하는 것입니다.

그것에 대해 어떻게 생각하세요? rsync가 언제 끝나는 지 아는 방법?



답변

inotifywait( modify,create,delete,move플래그가 활성화 된 상태에서) 및을 사용할 수 있습니다 rsync.

while inotifywait -r -e modify,create,delete,move /directory; do
    rsync -avz /directory /target
done

inotifywait시스템에 없는 경우 다음을 실행하십시오.sudo apt-get install inotify-tools


답변

다음과 같은 것이 필요합니다.
https://github.com/axkibe/lsyncd
rsync와 inotify를 결합한 도구입니다. 전자는 올바른 옵션을 설정하여 마지막 비트에 대한 디렉터리를 미러링하는 도구입니다. 후자는 디렉토리 ot 파일의 변경 사항을 프로그램에 알리도록 커널에 지시합니다. 그것은 말한다 :

몇 초 동안 이벤트를 집계하고 결합한 다음 하나 이상의 프로세스를 생성하여 변경 사항을 동기화합니다.

그러나 – 디지털 오션에에 따라 https://www.digitalocean.com/community/tutorials/how-to-mirror-local-and-remote-directories-on-a-vps-with-lsyncd -이 마땅의 수 우분투 저장소!

비슷한 요구 사항이 있으며 아직 시도하지 않은이 도구가 작업에 적합한 것 같습니다.


답변

@silgon 대답의 간단한 수정 :

while true; do
  inotifywait -r -e modify,create,delete /directory
  rsync -avz /directory /target
done

(@silgon 버전을 cron에서 실행하면 Ubuntu 16에서 때때로 충돌)


답변

fschange 를 활용할 수 있습니다 . Linux 파일 시스템 변경 알림입니다. 소스 코드는 위 링크에서 다운로드 할 수 있으며 직접 컴파일 할 수 있습니다. fschangeproc 파일 (/ proc / fschange)에서 데이터를 읽어 파일 변경을 추적하는 데 사용할 수 있습니다. 데이터가 파일에 기록 될 때 fschange는 파일이 변경되었음을 알리는 대신 수정 된 정확한 간격을보고합니다. 고급 솔루션을 찾고 있다면 Resilio Connect를 확인하는 것이 좋습니다 . 크로스 플랫폼이며 사용 및 모니터링을위한 확장 된 옵션을 제공합니다. BitTorrent 기반이기 때문에 다른 기존 동기화 도구보다 빠릅니다. 그들은 그들을 대신하여 작성되었습니다.


답변

이 무료 프로그램을 사용하여 로컬 파일과 디렉토리를 동기화합니다 : https://github.com/Fitus/Zaloha.sh . 저장소에는 간단한 데모도 포함되어 있습니다.

좋은 점 : bash 쉘 스크립트 (하나의 파일 만 해당)입니다. 다른 프로그램과 같은 블랙 박스가 아닙니다. 문서도 있습니다. 또한 일부 기술적 인 재능이 있으면이를 “구부리고” “통합”하여 원하는 최종 솔루션을 만들 수 있습니다.


답변