Bagaimana cara mengecualikan file dalam rsync?

12

Saya menggunakan server ubuntu 12,04, sekarang saya ingin membuat cadangan beberapa file menggunakan rsync, ini dia coba:

rsync -aAX $HOME/Documents/* $HOME/Backups/TEST --exclude={$HOME/Documents/another/*,$HOME/Documents/temp/*} 

Seperti yang Anda lihat, saya ingin membuat cadangan semua file dalam folder $ HOME / Documents to folder $ HOME / Backups / TEST , tetapi mengecualikan file dalam folder lain dan temp . Tapi saya gagal, rsync masih menyalin file di kedua folder yang dikecualikan:

ls $HOME/Backups/TEST/another
test

Tes adalah file di folder lain , dan juga disalin meskipun saya mengecualikan file dalam rsync, mengapa? Bagaimana cara membiarkan file-file itu benar-benar dikecualikan?

Searene
sumber

Jawaban:

11

Ada beberapa masalah dengan perintah rsync Anda (lihat juga manual untuk rsync untuk penjelasan terperinci tentang aturan filter).

  • kita membutuhkan --excludeperintah masing-masing untuk setiap pola yang diberikan.
  • jalur yang diberikan harus relatif terhadap jalur sumber (tidak ada jalur absolut).
  • opsi perlu diberikan sebelum kami menyatakan sumber dan tujuan.

Sebagai contoh Anda, sintaks berikut akan berfungsi:

rsync -avAX --exclude=another/ --exclude=temp/ ~/Documents/ ~/Backups/TEST

Perhatikan bahwa jika pola pengecualian berakhir dengan /itu merujuk ke direktori. Jika Anda menghilangkan keduanya, file dan direktori dengan nama itu akan dikecualikan. Ganti dengan wildcard *untuk mengecualikan semua file atau direktori dengan string dalam nama mereka.

Takkat
sumber
6
Ini tidak sepenuhnya benar. Saya tidak yakin bagaimana cara kerjanya, tetapi dari percobaan, --exclude=/fooakan mengecualikan direktori foosecara langsung di sumbernya, tetapi --exclude=fooakan mengecualikan direktori yang bernama foo, bahkan dalam subdirektori.
Sparhawk
10

Anda mungkin menemukan lebih mudah untuk menambahkan .rsync-filterfile di direktori sumber Anda, dan menggunakan -Fopsi.

Dari halaman manual:

-F: Opsi -F adalah singkatan [...] untuk aturan ini:

 --filter='dir-merge /.rsync-filter'

Ini memberitahu rsync untuk mencari file .rsync-filter per-direktori yang telah ditaburkan melalui hierarki dan menggunakan aturan mereka untuk memfilter file dalam transfer.

Misalnya: dalam $ HOME / Documents / .rsync-filter

# you can add comments in filter files

- /another/
- /temp/

Alih-alih -, Anda juga bisa menulis seluruh kata exclude.

Sekarang kamu bisa

rsync -aAX -F $HOME/Documents/ $HOME/Backups/TEST/
mivk
sumber