Skip to main content
  1. Posts/

Rsync dengan maxdepth subfolder

·2 mins·
Table of Contents

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, sehingga rsync tidak 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/

Related