Saya menjalankan Fedora 17 64-bit dan rsync --exclude=/home/ben/<dir>
tidak berfungsi seperti yang diharapkan.
Saya mencoba rsync
direktori home saya ke thumb drive, tetapi saya ingin mengecualikan tentu saja direktori yang menyimpan file cache dan membangun file. Ini adalah perintah yang saya gunakan:
rsync --exclude=/home/ben/build/ --exclude=/home/ben/.ccache -arv /home/ben home-ben/
Namun, konten dari ~/build
dan ~/.ccache
sedang disalin oleh rsync
. Apa yang saya lakukan salah?
Jawaban:
Global
rsync
aturan filter yang diawali dengan terkemuka/
yang berlabuh ke akar transfer. Mengutip dari bagian "INCLUDE / EXCLUDE ATURAN" halaman manual:Dalam perintah Anda (
rsync ... -arv /home/ben home-ben/
), file/home/ben/foo
akan ditransfer kehome-ben/ben/foo
. Akar transfer adalahhome-ben
dan jalur filter yang benar adalah/ben/foo
. Demikian,/home/ben/.ccache
Anda memerlukan jalur filter/ben/.ccache
/home/ben/build/
Anda memerlukan jalur filter/ben/build/
Penjelasan lebih rinci dapat ditemukan di bagian "POLA YANG TERMASUK / TERMASUK" di
rsync(1)
halaman manual .Perhatikan bahwa meninggalkan pemimpin saja
/
tidak selalu seperti yang Anda inginkan. Mengutip lagi dari bagian halaman manual yang sama:Dengan demikian pola filter
build/
akan cocok dengan direktori build di mana saja/home/ben
, bahkan/home/ben/many/sub/directories/build/
.sumber
rsync -a source destination
menyalin direktori sumber itu sendiri ke tujuan. Ini menentukan apa akar dari transfer untuk menginformasikan ekspresi kecualikan. Penggunaan / dalam ekspresi pengecualian yang tepat kemudian dijelaskan di atas. Perhatikan khususnya yangrsync --exclude='/dir1' source destination
tidak akan mengecualikan apa pun.Saya pikir
exclude
jalur Anda harus relatif terhadap jalur sumber. Bisakah Anda mencoba ini?Inilah tes, untuk perbandingan:
sumber
--verbose
perintah adalah format yang harus Anda gunakan.Saya punya masalah ini dalam sebuah skrip (saya tidak tahu apakah ini kasus Anda). Saya karena saya menggunakan perintah ini dalam skrip dan saya menggunakan sh bukan bash. periksa shebang di awal skrip Anda.
sumber
Pola kecualikan Anda akan berfungsi, jika Anda rsync seluruh jalur / rumah yaitu tanpa garis miring:
Tetapi lebih baik hanya rsync isi folder dengan garis miring:
Anda juga dapat menggunakan daftar abaikan, lihat: https://askubuntu.com/questions/545655/backup-your-home-directory-with-rsync-and-skip-useless-folderers
sumber
Untuk mengecualikan folder tertentu dengan rsync, Anda perlu mempertimbangkan jalur relatif dalam perintah. dalam kasus Anda:
di mana "ben" adalah folder yang Anda sinkronkan
sumber