두 개의 폴더가 있습니다.
ORIGINAL/
ORIGINAL_AND_MY_CHANGES/
내 친구가 복사본을 갖고 있습니다 ORIGINAL/
. 생성하려는 파일 에는 . MY_CHANGES.tgz
만 포함되어 있어야 합니다 . 그러면 내 친구가 복사본에 압축을 풀고 얻을 수 있습니다 .ORIGINAL_AND_MY_CHANGES/
ORIGINAL/
ORIGINAL/
ORIGINAL_AND_MY_CHANGES/
어떻게 해야 하나요?
PS 시도해 보았지만 diff
바이너리 데이터를 저장하지 않고 rsync --link-dest
아카이브에서 쓸모 없는 하드 링크를 생성합니다.
PPS 제가 아는 한, 수정 시간을 사용하여 어떤 파일이 변경되었는지 판단할 수는 없습니다.
답변1
rsync 사용
당신이 하고 있는 일은 본질적으로 증분 백업입니다. 당신의 친구(당신의 백업)는 이미 원본 파일을 가지고 있고 당신은 원본에서 변경한 파일을 포함하는 아카이브를 만들고 싶습니다.
동기화증분 백업 기능이 있습니다.
cd ORIGINAL_AND_MY_CHANGED
rsync -a -c --compare-dest=../ORIGINAL . ../CHANGES_ONLY
-a
모든 속성(시간, 소유권 등)이 보존된다는 의미입니다.-c
날짜와 크기에 관계없이 파일 내용을 비교하는 것을 의미합니다.--compare-dest=/some/directory
이는 이 디렉터리와 소스 트리의 동일한 파일이 복사되지 않음을 의미합니다. 경로는 대상 디렉터리에 상대적입니다.
Rsync는 파일이 없더라도 모든 디렉터리를 복사합니다. 이러한 빈 디렉토리를 삭제하려면 find -depth CHANGES_ONLY -type d -empty -delete
(또는 및가 find
없는 경우 ) 을 실행하십시오 .-delete
-empty
find -depth CHANGES_ONLY -exec rmdir {} + 2>/dev/null
그런 다음 디렉토리에서 아카이브를 만듭니다 CHANGES_ONLY
.
산책로
파일이 포함된 디렉터리를 탐색합니다. 원본과 동일한 파일은 건너뛰세요. 필요에 따라 대상에 디렉터리를 만듭니다. 변경된 파일을 복사합니다.
cd ORIGINAL_AND_MY_CHANGES
find . \! -type d -exec sh -c '
for x; do
if cmp -s "$x" "../ORIGINAL/$x"; then continue; fi
[ -d "../CHANGES_ONLY/$x" ] || mkdir -p "../CHANGES_ONLY/${%/*}"
cp -p "$x" "../CHANGES_ONLY/$x"
done
' {} +
답변2
주문하다
rsync --only-write-batch=FILE $other_options ORIGINAL_AND_MY_CHANGES/ ORIGINAL/
필요한 변경 사항이 포함된 배치 파일이 생성됩니다(아무 것도 수정하지 않음).
배치 파일을 다운로드하여 사용할 수 있는 다른 사이트에 패치를 적용할 수 있습니다.
rsync --read-batch=FILE ORIGINAL/