GNU/Linux >> Belajar Linux >  >> Linux

Rsync, Hanya Sertakan Jenis File Tertentu Tidak Termasuk Beberapa Direktori?

Saya hanya ingin menyinkronkan jenis file tertentu (mis. .py ) dan saya ingin mengecualikan file di beberapa direktori (mis. venv ).

Ini yang saya coba:

rsync -avz --include='*/' --exclude='venv/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/

Tapi itu tidak berhasil.

Apa yang saya lewatkan?

Saya juga mengikuti jawaban untuk pertanyaan ini tetapi tidak membantu.

Jawaban yang Diterima:

venv/ perlu dikecualikan sebelum */ sudah termasuk:

rsync -avz --exclude='venv/' --include='*/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/

Seluk-beluknya adalah rsync memproses aturan secara berurutan dan aturan pencocokan pertama menang. Jadi, jika --include='*/' ada sebelum --exclude='venv/' , lalu direktori venv/ disertakan oleh --include='*/' dan aturan pengecualian tidak pernah dikonsultasikan.

Bisakah kita menyederhanakan ini?

Mengapa kita membutuhkan --include='*/' dan --exclude='*' ? Mengapa tidak --exclude=venv/ --include='*.py' cukup?

Standarnya adalah menyertakan file/direktori. Jadi, pertimbangkan:

rsync -avz --exclude='venv/' --include='*.py' source target

Ini akan mencakup semuanya kecuali file atau direktori di bawah venv/ . Namun, Anda hanya menginginkan .py file. Itu berarti kita harus secara eksplisit mengecualikan file lain dengan --exclude='*' .

--exclude='*' tidak termasuk keduanya file dan direktori. Jadi, jika kita menentukan --exclude='*' , maka semua direktori akan dikecualikan dan hanya .py file itu direktori root akan ditemukan. .py file dalam subdirektori tidak akan pernah ditemukan karena rsync tidak melihat ke direktori yang dikecualikan. Jadi, jika kita memiliki --exclude='*' , kita perlu mengawalinya dengan --include='*/' untuk memastikan bahwa isi dari semua direktori dieksplorasi.


Linux
  1. Bandingkan Direktori Tapi Bukan Isi File?

  2. Statistik Rekursif Pada Jenis File Di Direktori?

  3. Perintah Shell ke direktori tar tidak termasuk file/folder tertentu

  1. Hapus hanya file dalam direktori di direktori BUKAN linux

  2. tar/gzip tidak termasuk file tertentu

  3. rsync menggunakan regex untuk menyertakan hanya beberapa file

  1. Cara tar (kompres) file, tidak termasuk file atau direktori tertentu

  2. Temukan direktori yang berisi sejumlah file

  3. Transfer SCP hanya mengubah file