Dengan rsync
Apa yang Anda lakukan pada dasarnya adalah cadangan tambahan: teman Anda (cadangan Anda) sudah memiliki file asli, dan Anda ingin membuat arsip yang berisi file yang telah Anda ubah dari aslinya.
Rsync memiliki fitur untuk backup inkremental.
cd ORIGINAL_AND_MY_CHANGED
rsync -a -c --compare-dest=../ORIGINAL . ../CHANGES_ONLY
-a
berarti melestarikan semua atribut (waktu, kepemilikan, dll.).
-c
artinya membandingkan konten file dan tidak bergantung pada tanggal dan ukuran.
--compare-dest=/some/directory
berarti bahwa file yang identik di bawah direktori itu dan pohon sumber tidak disalin. Perhatikan bahwa jalur relatif ke direktori tujuan.
Rsync menyalin semua direktori, walaupun tidak ada file yang berakhir di sana. Untuk menyingkirkan direktori kosong ini, jalankan find -depth CHANGES_ONLY -type d -empty -delete
(atau jika Anda find
tidak memiliki -delete
dan -empty
, jalankan find -depth CHANGES_ONLY -exec rmdir {} + 2>/dev/null
).
Kemudian buat arsip dari CHANGES_ONLY
direktori.
Jalan pejalan kaki
Lintasi direktori dengan file Anda. Lewati file yang identik dengan aslinya. Buat direktori di target sesuai kebutuhan. Salin file yang diubah.
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
' {} +