it-swarm-id.com

Hapus file asing dari dir dir melalui rsync?

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?

51
Cheng

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.

73
Steven D