Với rsync
Những gì bạn đang làm về cơ bản là một bản sao lưu gia tăng: bạn của bạn (bản sao lưu của bạn) đã có các tệp gốc và bạn muốn tạo một kho lưu trữ chứa các tệp bạn đã thay đổi từ bản gốc đó.
Rsync có các tính năng để sao lưu gia tăng.
cd ORIGINAL_AND_MY_CHANGED
rsync -a -c --compare-dest=../ORIGINAL . ../CHANGES_ONLY
-a
có nghĩa là bảo tồn tất cả các thuộc tính (thời gian, quyền sở hữu, v.v.).
-c
có nghĩa là so sánh nội dung tập tin và không dựa vào ngày và kích thước.
--compare-dest=/some/directory
có nghĩa là các tệp giống hệt nhau trong thư mục đó và cây nguồn không được sao chép. Lưu ý rằng đường dẫn có liên quan đến thư mục đích.
Rsync sao chép tất cả các thư mục, ngay cả khi không có tệp nào kết thúc ở đó. Để loại bỏ các thư mục trống này, hãy chạy find -depth CHANGES_ONLY -type d -empty -delete
(hoặc nếu bạn find
không có -delete
và -empty
chạy find -depth CHANGES_ONLY -exec rmdir {} + 2>/dev/null
).
Sau đó thực hiện lưu trữ từ CHANGES_ONLY
thư mục.
Đường dành cho người đi bộ
Đi qua thư mục với tập tin của bạn. Bỏ qua các tập tin giống hệt với bản gốc. Tạo thư mục trong mục tiêu khi cần thiết. Sao chép tập tin đã thay đổi.
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
' {} +