Katakan saya punya
SRC
001.jpg
002.jpg
001.txt
a.Zip
DEST
hello.jpg
rsync -d --delete SRC:{*.jpg,*.txt} DEST
Itu tidak menghapus hello.jpg dari DEST, ada ide bagaimana mengarsipkan ini?
Alasan perintah Anda tidak berfungsi dijelaskan oleh halaman manual untuk rsync (penekanan ditambahkan):
--menghapus
Ini memberitahu rsync untuk menghapus file asing dari sisi penerima (file yang tidak berada 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 adalah diperluas oleh Shell dan rsync dengan demikian mendapat permintaan untuk mentransfer file individual, bukan direktori induk file. File yang dikecualikan dari transfer juga dikecualikan dari dihapus kecuali jika Anda menggunakan - opsi hapus-dikecualikan atau tandai aturan sebagai hanya cocok di sisi pengiriman (lihat menyertakan/mengecualikan pengubah 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 mereka cocok dengan pola "termasuk" sebelum cocok dengan pola "*" yang dikecualikan. Segala sesuatu yang lain dikecualikan oleh --exclude '*'
pola. --delete-excluded
opsi memastikan bahwa bahkan file yang dikecualikan di sisi DEST dihapus.