rsync에서 이름이 바뀐 파일 또는 디렉토리 처리


26

나는 일하고 rsync디렉터리 복제를위한 스크립트. 새롭고 수정 된 파일이나 디렉토리 만 동기화하지만 이름이 바뀐 파일이나 디렉토리를 새 파일이나 디렉토리로 복사하여 파일이 동기화되지 않은 것을 좋아하지는 않습니다. 업무 시간 중에 실행되므로 대역폭 제한을 1MB로 설정했습니다. 내 스크립트는 다음과 같습니다.

rsync -zvru --bwlimit=1024  /mymounts/test1/ /mymounts/test2

누군가 새 파일이나 수정 된 파일 만 복사하여 이름을 바꾸면 파일과 디렉토리를 동기화 된 상태로 유지하려면 어떻게해야합니까? 문제의 파일은 다음과 같습니다

ls "/mymounts/test1/some stuff"
new directory  newfile1.txt  newfile3.txt  renamedFile.txt

ls "/mymounts/test2/some stuff"
new directory  newfile1.txt  newfile2.txt  newfile3.txt  renamedFile.txt

또는 이름이 바뀐 파일을 다른 디렉토리로 옮기는 방법이 /mymounts/VerControl있습니까?

답변:


23

rsync소스 및 대상 디렉토리의 파일 시스템이 하드 링크를 지원하는 경우 이동 및 이름이 바뀐 파일을 처리 할 수 ​​있습니다 . 아이디어는 실제 전송 전에 rsync가 하드 링크를 재구성하도록하는 것입니다. 여기서 훌륭한 설명을 찾을 수 있습니다 .

우리는 소스 / 대상 디렉토리 내에 숨겨진 하드 링크 트리를 생성하는 간단한 솔루션으로 끝났습니다. 기본 스크립트는 다음과 같습니다.

# Name of hidden directory
Shadow=".rsync_shadow"

# do real sync
rsync -ahHv --stats --no-inc-recursive --delete --delete-after "$Source"/ "$Target"

# update/create hidden dir of hard links in source
rsync -a --delete --link-dest="$Source" --exclude="/$Shadow" "$Source"/ "$Source/$Shadow"

# update/create hidden dir of hard links in target
rsync -a --delete --link-dest="$Target" --exclude="/$Shadow" "$Target"/ "$Target/$Shadow"

나는이 GitHub의에 대한 예제 스크립트를 . 그러나 프로덕션에서이 방법을 사용하기 전에 많은 양의 테스트를 수행하는 것이 좋습니다.


또한 당신이 연결하는“화려한 설명”은이 위대한 기본 rsync기사 인 FWIW를 언급합니다 . everythinglinux.org/rsync
JakeGould

19

-y | --fuzzyrsync 옵션 을보고 싶을 수도 있습니다. 그 이외의 rsync에는 이름 변경을 추적 할 수있는 방법이 없으므로 이름이 바뀐 파일을 전송하게됩니다.

rsync 맨 페이지에서 :

   -y, --fuzzy
          This option tells rsync that it should look for a basis file for
          any  destination  file  that  is missing.  The current algorithm
          looks in the same directory as the destination file for either a
          file  that  has  an identical size and modified-time, or a simi-
          larly-named file.  If found, rsync uses the fuzzy basis file  to
          try to speed up the transfer.

7
사용하는 경우 즉, 참고 --fuzzy, 당신이 그것을 결합 고려해야 --delete-delay으로, "기본적으로 rsync와는 않습니다 --delete-before가 복사 할 수 있습니다 전에 따라서 이동 / 기본 파일을 제거" . 출처 : Sonia Hamilton
Ronan Jouchet

1

당신은 할 수 없습니다.

Rsync에는 세 가지 모드가 있습니다.

  • 모든 파일 복사
  • 기존 (수정 / 수정되지 않은) 파일 복사-여기에는 많은 옵션이 있습니다
  • 존재하지 않는 파일을 복사하십시오.

그러나이 세 가지 모드에는 두 가지 하위 범주가 있습니다.

  • 제외
  • 포함

Rsync는 이름이 바뀐 파일을 추적하지 않으며 상태가 없습니다. 대신 모든 파일을 복사 하고 원하지 않는 파일은 제외하십시오 . 화이트리스트를 변경할 수 없으며 블랙리스트를 가질 수 있습니다.

rsync [..stuff..] --exclude 'lib/'

입력이 이름이 바뀐 파일과 함께 살아야하기 때문에 감사합니다.
jmituzas

존재하지 않는 파일을 삭제하도록 할 수 있습니다. 그러나 복사 기능으로 소스에서 이름을 바꾸면 이름이 바뀐 파일이 복사됩니다.
Evan Carroll

버전을 -b로 유지하고 date +%Y%m%d%k%M%Ssuffix =를 date +%Y%m%d%k%M%S설정해도 suffix = .ORIGINALSUFFIX를 얻을 수 있습니까?
jmituzas

0

내가 아는 rsync한 파일 이름 변경을 인식 할 수 없습니다 새 파일을 다시 전송해야합니다. artyom 의 답변을 참조하십시오 .

사라진 파일을 삭제하려면 --delete옵션 을 사용해야 합니다.

또한 미러링의 경우 -a( archive ) 를 사용하는 것이 좋습니다.이 아카이브 에는 멋진 옵션이 있습니다.

man 1 rsync자세한 내용을 살펴보십시오 .


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