GNU/Linux >> Belajar Linux >  >> Linux

Tidak bisa mendapatkan opsi kecualikan rsync untuk mengecualikan dir

mkdir -p test/a/b/c/d/e
mkdir -p test/dest
rsync -nvraL test/a test/dest --exclude=a/b/c/d 

Ini bekerja. Sebagai test/a adalah direktori dasar yang disinkronkan, pola pengecualian ditentukan dengan memulai dengan a/

Tunjukkan kami jalur/pengecualian sebenarnya jika ini tidak membantu.

Menjalankan rsync dengan -vn akan mencantumkan dirs/file - polanya dicocokkan dengan format yang dicetak rsync.


Salah satu dari ini akan berhasil:

rsync -nvraL test/a test/dest --exclude=/a/b/c/d
rsync -nvraL test/a/ test/dest --exclude=/b/c/d

Perhatikan akhiran / di jalur sumber membuat perbedaan penting pada bagaimana --exclude harus ditentukan. Ini mengasumsikan kita memiliki:

mkdir -p test/a/b/c/d/e
mkdir -p test/a/other/place/a/b/c/d
mkdir -p test/dest

Posting Asli mengalami kesulitan saat mengecualikan jalur dimulai dengan / . Jawaban Daniel benar bahwa inisial / di jalur pengecualian mungkin diinginkan untuk mengecualikan jalur tertentu, dan bahwa / awal ini harus dipahami seperti memimpin ^ dalam ekspresi reguler. Namun, jawabannya memiliki kesalahan ketik yang kritis tentang akhiran / di jalur sumber.


Mengikuti contoh Erik, Anda ingin melakukan ini:

rsync -nvraL test/a/ test/dest --exclude=/b/c/d

Sebenarnya, baik jawaban Erik maupun Antoni tidak sepenuhnya akurat.

Erik setengah benar dalam mengatakan itu

Karena test/a adalah direktori dasar yang disinkronkan, pola pengecualian ditentukan dengan memulai dengan a/

Benar bahwa root pola kecualikan adalah test/a (yaitu pola /some/path mengikat ke test/a/some/path ), tapi itu bukan keseluruhan ceritanya.

Dari halaman manual:

jika pola dimulai dengan a / maka pola tersebut ditambatkan ke titik tertentu dalam hierarki file, jika tidak maka akan dicocokkan dengan akhir nama path. Ini mirip dengan ^ terkemuka dalam ekspresi reguler. Jadi "/foo" akan cocok dengan file bernama "foo" di "root of the transfer" (untuk aturan global) atau di direktori file gabungan (untuk aturan per-direktori).

Kita dapat mengabaikan per-directory sedikit karena tidak berlaku untuk kami di sini.

Oleh karena itu, rsync -nvraL test/a test/dest --exclude=a/b/c/d pasti akan mengecualikan test/a/b/c/d (dan anak-anak), tetapi juga akan mengecualikan test/a/other/place/a/b/c/d .

rsync -nvraL test/a test/dest --exclude=/b/c/d , sebaliknya, akan mengecualikan hanya test/a/b/c/d (dan anak-anak) (test/a menjadi titik di mana / berlabuh).

Inilah mengapa Anda masih memerlukan garis miring inital penahan jika Anda ingin mengecualikan jalur tertentu dari yang didukung. Ini mungkin tampak seperti detail kecil, dan ini akan menjadi semakin spesifik pola pengecualian Anda (mis. Pictures vs. home/daniel/Pictures ) tetapi itu mungkin hanya datang untuk menggigit Anda.


Linux
  1. Cara Mengecualikan Direktori Tertentu Dari Menyalin Di Linux

  2. Opsi Tidak Dikenal Rsync Dari Eksekusi Skrip Bash?

  3. Folder Pengecualian Rsync Tidak Berfungsi?

  1. 6 Contoh rsync untuk Mengecualikan Banyak File dan Direktori menggunakan pengecualian-dari

  2. Mulailah dengan Lateks di Linux

  3. Menggunakan Rsync sertakan dan kecualikan opsi untuk menyertakan direktori dan file berdasarkan pola

  1. rsync hanya menyalin jenis file tertentu menggunakan opsi sertakan

  2. Bisakah kita menguji alokasi memori?

  3. Bagaimana saya bisa mengecualikan file secara default dengan rsync?