Saya mencoba menggunakan --delete
opsi rsync
untuk menghapus file di direktori target yang tidak ada di direktori asli
Ini adalah perintah yang saya gunakan:
rsync -avz --ignore-existing --recursive --delete /var/www/* root@mydomaintest.com:/var/www
Jadi pertanyaan saya adalah, bagaimana saya bisa menghapus semua file di direktori target yang tidak ada di direktori asli?
--recursive
terlalu-a
Perintah Anda tidak berfungsi karena ketika Anda menggunakan
/var/www/*
sebagai sumber, shell Anda sedang melakukan globbing di atasnya yaitu shell memperluas*
ke semua file di direktori itu dan menyalin file satu per satu, jadi di sini file individual telah menjadi sumber daripada direktori induk.Jadi, jika Anda menggunakan
/var/www/*
, maka Anda tidak perlu--recursive
opsi karena*
akan menyebabkan file untuk disalin (bersama dengan direktori dengan isinya), bukan direktori induk yang berisi file. Karena alasan yang sama--delete
tidak berfungsi, seperti--delete
akan menghapus file dari direktori tujuan yang tidak ada di direktori sumber , tetapi Anda menyalin file sehingga tidak menghapus file (diharapkan).Ini akan membuat Anda lebih jelas:
Seperti yang Anda lihat, saya telah menggunakan sumbernya karena
/foo/*
itursync
perintah yang dieksekusi adalahdengan
*
membuat shell untuk memperluasnya dan menjadikan semua file satu per satu sebagai argumen sumber, bukan direktori induk secara keseluruhan (dan Anda juga tidak perlu--recursive
dalam hal ini).Jadi, jika Anda ingin membuat
--delete
pekerjaan, jalankan sebagai:sumber