파일 간 복사 대신 패치 파일을 생성하기 위해 rsync를 사용합니까?


19

rsync를 사용하여 한 서버에서 다른 서버로 변경된 많은 파일을 복사하고 있습니다. 이 -n옵션을 사용하여 드라이 런을 수행 할 수 있으므로 변경된 파일을 확인할 수 있습니다. 그러나 변경된 파일 내용의 diff를 인쇄하기 위해 rsync를 얻을 수 있습니까? 복사하기 전에 무슨 일이 일어나고 있는지보고 싶습니다. 파일에 저장하고 나중에 diff (1)로 적용 할 수있는 것이 있습니까?

답변:


8

더 좋은 방법이있을 수 있지만 효율적이지는 않지만 작동 할 수 있습니다.

 rsync -vrn / dest:/ > ~/file_list

그런 다음 테스트를 편집하여 통계를 제거한 다음 :

while read file; do
    diff $file <(ssh dest "cat $file")
done < ~/edited_file_list

다른 옵션 :
sshfs / fuse와 같은 파일 시스템을 마운트 한 다음 diff를 사용하는 것도 고려할 수 있습니다.


참고 : 나는 그 명령들을 테스트하지 않았다 ;-)
Kyle Brandt

좋은 시작이지만 통계 및 "보내는 증분 파일 목록"등과 같은 rsync의 추가 출력이 많이 있습니다.
Rory

당신은 포맷 --out = "% f를"사용할 수 있습니다
카일 브랜

출력 형식을 사용하지 않으면 v를 삭제하고 grep -v '비정규 파일 건너 뛰기'를 선택하십시오. 파일이 매우 깨끗해야합니다.
Kyle Brandt

우연히 rsync --diff2 년 후에 새롭고 더 나은 방법이 있는지 확인하는 중 ...
Ring Ø

2

rsync는 기본적 으로이 작업을 수행 할 수 없지만 unison 을 사용할 가능성이 있으면 diff 스타일 형식을 생성 할 수 있습니다.



1

rsync는 파일 간의 이진 차이 만 처리하므로 기본적으로 가능하지 않습니다.

rsync의 출력을 사용하여 스크립트를 작성할 수 있습니다. 그러나 그것은 해킹 일 것입니다.

그래도 Unison 과 함께 가능하다고 생각합니다 .


1
내 말은 hackish의 의미입니까? :-)
Kyle Brandt

카일 : D
Dan Carley

1

diff (텍스트 파일) 또는 xdelta (2 진 파일)와 같은 것을 사용하여 diff를 생성하지 않는 이유는 무엇입니까? 왜 rsync에서 무언가를 가져와야합니까?


나는 rsync가 필요하지 않지만 원격이어야한다
Rory

아, 아냐!
womble

1

Kyle의 답변을 확장하기 위해 프로세스가 자동화됩니다. 완전히 테스트되지 않았으며, 깨지기 쉬우 며 컴퓨터를 삭제하고 개를 죽일 수 있습니다.

#!/bin/bash

REMOTE=${1?Missing Remote Path}
LOCAL=${2?Missing Local Path}

# Trim trailing slash since we'll be adding it as a separator later
REMOTE=${REMOTE%/}
LOCAL=${LOCAL%/}

#Break it down
RHOST=${REMOTE%:*}
RPATH=${REMOTE#*:}

while read FILE; do
    diff -u ${LOCAL}/${FILE} <(ssh $RHOST "cat ${RPATH}/${FILE}")
done < <(rsync -vrn $REMOTE/ $LOCAL/ | sed '1d;/^$/q')

0

rsync 알고리즘은 파일의 이진 청크를 비교하여 작동합니다. 이진 diff는 인쇄 할 수 없습니다. rsync 알고리즘을 사용하여 이진 diff를 생성하는 rdiff 라는 명령이 있지만 설명하는 데 유용하지는 않지만 일반적으로 증분 백업을 구현하는 데 사용됩니다.

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