나는 일하고 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
있습니까?
답변
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의에 대한 예제 스크립트를 . 그러나 프로덕션에서이 방법을 사용하기 전에 많은 양의 테스트를 수행하는 것이 좋습니다.
답변
-y | --fuzzy
rsync 옵션 을보고 싶을 수도 있습니다. 그 이외의 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.
답변
당신은 할 수 없습니다.
Rsync에는 세 가지 모드가 있습니다.
- 모든 파일 복사
- 기존 (수정 / 수정되지 않은) 파일 복사-여기에는 많은 옵션이 있습니다
- 존재하지 않는 파일을 복사하십시오.
그러나이 세 가지 모드에는 두 가지 하위 범주가 있습니다.
- 제외
- 포함
Rsync는 이름이 바뀐 파일을 추적하지 않으며 상태가 없습니다. 대신 모든 파일을 복사 하고 원하지 않는 파일은 제외하십시오 . 화이트리스트를 변경할 수 없으며 블랙리스트를 가질 수 있습니다.
rsync [..stuff..] --exclude 'lib/'
답변
내가 아는 artyom 의 답변을 참조하십시오 .rsync
한 파일 이름 변경을 인식 할 수 없습니다 새 파일을 다시 전송해야합니다.
사라진 파일을 삭제하려면 --delete
옵션 을 사용해야 합니다.
또한 미러링의 경우 -a
( archive ) 를 사용하는 것이 좋습니다.이 아카이브 에는 멋진 옵션이 있습니다.
man 1 rsync
자세한 내용을 살펴보십시오 .