Saya ingin rsync hanya tipe file tertentu (mis. .py
) Dan saya ingin mengecualikan file dalam beberapa direktori (mis venv
.).
Inilah 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.
--include='*/'
?Jawaban:
venv/
perlu dikecualikan sebelum*/
dimasukkan:Kehalusannya adalah bahwa
rsync
aturan proses dalam urutan dan aturan yang cocok pertama menang. Jadi, jika--include='*/'
sebelumnya--exclude='venv/'
, maka direktorivenv/
dimasukkan oleh--include='*/'
dan aturan pengecualian tidak pernah dikonsultasikan.Bisakah kita menyederhanakan ini?
Standarnya adalah memasukkan file / direktori. Jadi, pertimbangkan:
Ini akan mencakup semua hal kecuali file atau direktori di bawah
venv/
. Anda, bagaimanapun, hanya menginginkan.py
file. Itu berarti bahwa kita harus secara eksplisit mengecualikan file dengan--exclude='*'
.--exclude='*'
tidak termasuk kedua file dan direktori. Jadi, jika kita tentukan--exclude='*'
, maka semua direktori akan dikecualikan dan hanya.py
file itu direktori root yang akan ditemukan..py
file dalam subdirektori tidak akan pernah ditemukan karenarsync
tidak melihat ke direktori yang dikecualikan. Jadi, jika sudah--exclude='*'
, kita harus mengawalinya dengan--include='*/'
untuk memastikan bahwa isi dari semua direktori dieksplorasi.sumber
--include='*/'
dan--exclude='*'
? Kenapa hanya--exclude=venv/ --include='*.py'
tidak berfungsi?