Jawaban:
Alasan perintah Anda tidak berfungsi dijelaskan oleh halaman manual untuk rsync (penekanan ditambahkan):
--menghapus
Ini memberitahu rsync untuk menghapus file asing dari sisi penerima (yang tidak ada di sisi pengirim), tetapi hanya untuk direktori yang sedang disinkronkan. Anda harus meminta rsync untuk mengirim seluruh direktori (mis. "Dir" atau "dir /") tanpa menggunakan wildcard untuk isi direktori (mis. "Dir / *") karena wildcard diperluas oleh shell dan rsync dengan demikian mendapat meminta untuk mentransfer file individual, bukan direktori induk file. File yang dikecualikan dari transfer juga dikecualikan dari dihapus kecuali jika Anda menggunakan opsi --delete-dikecualikan atau tandai aturan sebagai hanya cocok di sisi pengiriman (lihat pengubah sertakan / kecualikan di bagian FILTER RULES).
Jadi, saat Anda berlari
$ rsync -d --delete SRC:{*.jpg,*.txt} DEST
file yang tidak diinginkan dalam DEST tidak dihapus karena Anda belum benar-benar meminta direktori untuk disinkronkan, tetapi hanya untuk beberapa file tertentu. Untuk mendapatkan hasil yang Anda inginkan, coba sesuatu seperti ini:
rsync -d --delete-excluded --include '*.jpg' --include '*.txt' --exclude '*' SRC/ DEST/
Perhatikan bahwa urutan termasuk dan tidak termasuk masalah arahan. Pada dasarnya, setiap file diperiksa terhadap pola sertakan atau kecualikan sesuai urutan munculnya. Dengan demikian, file dengan ekstensi .jpg atau .txt disinkronkan karena cocok dengan pola "termasuk" sebelum cocok dengan pola "*" yang dikecualikan. Segala sesuatu yang lain dikecualikan oleh --exclude '*'
polanya. The --delete-excluded
Memastikan opsi yang bahkan dikecualikan file di sisi DEST akan dihapus.
--delete-excluded
. Tanpa itu, hanya *.jpg
dan *.txt
dapat dihapus di sisi tujuan. Dengan itu, file yang tidak terkait akan dihapus juga. Anda mungkin tertarik pada tutorial ini tentang filter rsync .