Secara default, rsync akan melakukan rekurensi ke seluruh subfolder tanpa batas kedalaman ketika opsi -r (recursive) digunakan. Namun, dalam banyak kasus, pengguna hanya ingin menyalin file dan folder sampai tingkat kedalaman tertentu, misal hanya folder utama dan satu atau dua tingkat subfolder saja.
Sayangnya, rsync tidak menyediakan opsi --maxdepth secara langsung. Oleh karena itu, diperlukan teknik khusus untuk mengatur kedalaman sinkronasi.
Implementasi Rsync Maxdepth #
1. Menggunakan Opsi --exclude
#
Untuk menyinkronkan file hingga kedalaman 2 (file di dalam folder utama dan satu tingkat subfolder), kita dapat memanfaatkan opsi --exclude pada rsync.
Contohnya:
rsync -r --exclude='/*/*/' source/ target/
Penjelasan:
-r: menyalin direktori secara rekursif--exclude='/*/*/': mengecualikan direktori pada kedalaman lebih dari 2, sehinggarsynctidak masuk ke subfolder tingkat berikutnya
Dengan perintah tersebut, rsync akan menyalin file dan folder seperti berikut:
target/
├── subfolder 1
│ └── wanted with depth 2.txt
├── subfolder 2
│ └── wanted with depth 2.txt
└── wanted with depth 1.txt
Artinya:
- File pada direktori utama (depth 1) tetap disalin
- File di dalam subfolder tingkat pertama (depth 2) juga disalin
- Subfolder yang lebih dalam dari itu tidak akan diproses
2. Menggunakan Opsi --include
#
Pendekatan --include cocok jika:
- Struktur folder kompleks
- Ingin kontrol yang lebih eksplisit
- Ingin memastikan hanya file tertentu yang ikut
Contohnya:
rsync -r \
--include='*/' \
--include='*/*' \
--exclude='*' \
source/ target/
3. Menggunakan Kombinasi Find dan Rsync #
Alternatif lain adalah menggunakan perintah find dengan opsi -maxdepth untuk menghasilkan daftar file/folder yang ingin disalin, lalu mengoper daftar tersebut ke rsync menggunakan opsi –files-from.
Contohnya:
find source/ -maxdepth 2 -type f > filelist.txt
rsync -av --files-from=filelist.txt / target/