Solusi 1:
Hapus *
. Seperti yang disebutkan di halaman manual rsync, --delete
opsi tidak berfungsi dengan entri karakter pengganti.
Gunakan ini sebagai gantinya:
rsync -a --delete $DIR1/ $DIR2/
"--deleteThis memberitahu rsync untuk menghapus file asing dari sisi penerima (yang tidak berada di sisi pengirim), tetapi hanya untuk direktori yang sedang disinkronkan. Anda pasti meminta rsync untuk mengirim seluruh direktori ( misalnya dir
atau dir/
) tanpa menggunakan karakter pengganti untuk konten direktori (mis. dir/*
) karena wildcard diperluas oleh shell dan rsync sehingga mendapat permintaan untuk mentransfer file individual, bukan direktori induk file. File yang dikecualikan dari transfer juga dikecualikan dari penghapusan kecuali Anda menggunakan --delete-excluded
opsi atau tandai aturan sebagai hanya cocok di sisi pengirim (lihat pengubah sertakan/kecualikan di bagian ATURAN FILTER)."
Solusi 2:
Alasannya adalah karena Anda memanggil rsync di /tmp/1/b, yang tidak akan mempertimbangkan file /tmp/1/a sama sekali.
Niat Anda tampaknya untuk rsync direktori /tmp/1/ -- jika Anda menggunakan "/tmp/1/" sebagai sumber daripada file individual, ia akan melihat bahwa "a" telah dihapus dari direktori dan menghapus dari target.
Solusi 3:
Jika Anda mengubah baris rsync kedua menjadi rsync -a --delete $DIR1/ $DIR2
(tanpa *) itu akan berhasil. Alasannya adalah shell memperluas *
ke nama file di direktori pertama, yang hanya b dalam kasus Anda, sehingga file yang hilang a tidak akan dianggap sama sekali oleh rsync, karena perintah yang dijalankan sebenarnya adalah rsync -a --delete $DIR1/b $DIR2
.