RSync - Tidak termasuk subdirektori tertentu dan anak-anaknya di mana subdirektori ada di level yang berbeda

37

Gak,

Saya menggunakan rsync untuk secara sinkron menyinkronkan pohon folder jarak jauh yang terlihat seperti berikut:

/folderA/a1/cache
/folderA/a1/cache/A1
/folderA/a1/cache/A2
/folderA/a1/somefolder
/folderA/a1/someotherfolder
/folderA/a2/somefolder/cache
/folderB/cache/
/folderB/b1/somefolder/cache
/folderB/b1/somefolder/yetanotherfolder/cache
/folderB/b1/somefolder/yetanotherfolder/cache/B1
/folderB/b1/somefolder/yetanotherfolder/cache/B2

Saya tidak tahu seperti apa struktur folder dan akan berubah seiring waktu. Jadi yang ingin saya lakukan adalah melakukan rsync secara rekursif di atas tetapi mengecualikan folder "cache" dan setiap sub folder yang dikandungnya sehingga saya akhirnya menyinkronkan:

/folderA/a1
/folderA/a1/somefolder
/folderA/a1/someotherfolder
/folderA/a2/somefolder
/folderB/
/folderB/b1/somefolder
/folderB/b1/somefolder/yetanotherfolder/

Ada saran?

Tepi
sumber
Lihat juga tutorial filter rsync .
Gilles 'SANGAT berhenti menjadi jahat'

Jawaban:

55

Anda menginginkan --excludebenderanya. Misalnya, rsync lokal:

rsync -a --exclude cache/ src_folder/ target_folder/

Sesederhana itu - aturan mengecualikan akan cocok dengan direktori bernama "cache" di mana saja di pohon Anda.

Untuk informasi lebih lanjut, lihat bagian "--exclude" dan "ATURAN FILTER" pada halaman manual rsync:

http://www.samba.org/ftp/rsync/rsync.html

Jander
sumber
1
Doh !!. Terima kasih itu adalah jawaban sederhana yang paling saya sukai :-)
TheEdge
1
Bagaimana kalau tidak di mana saja di pohon? Seperti, hanya mengecualikan a/cache. UPD Lihat jawaban ini
x-yuri
2
Juga --exclude /cache/(dengan yang terdepan /) hanya akan mengecualikan a/cachedirektori, bukan direktori yang bernama cache.
Amir Ali Akbari
Mengapa a/ b/di baris perintah di atas, apa artinya?
Danijel
1
@Danijel: a/adalah direktori tempat kami menyinkronkan (atau menyalin); b/adalah direktori yang sedang disinkronkan.
Jander