menyalin direktori rsync konten non-rekursif


8

Saya mencoba menyalin isi dari serangkaian direktori secara non-rekursif ke sistem remote lain.

/dirA/dir1/file
/dirA/dir2/file
/dirA/dir3/file

dir1, dir2, dan dir3 berisi banyak direktori yang saya tidak ingin disalin. Salin pada host jarak jauh ke / dirB yang mempertahankan struktur direktori yang sama.

Saya mencoba:

rsync /dirA/*/ host:/dirB/
rsync /dirA/   host:/dirB/

Tetapi mereka tidak melakukan apa yang saya inginkan.

Jawaban:


18

rsync memungkinkan Anda menentukan pola yang memicu masuknya atau pengecualian file dan direktori. Saya pikir Anda ingin menggunakan sesuatu seperti ini:

rsync -a -f '- /*/*/' /dirA/ host:/dirB/

Penjelasan:

  • -a memicu mode arsip yang mengaktifkan rekursi dan pelestarian "tautan simbolik, perangkat, atribut, izin, kepemilikan, dll.", menurut man rsync.
  • -f kependekan dari --filter=, yang menambahkan aturan penyaringan file.
    • Polanya ada di dalam tanda kutip tunggal sehingga shell tidak memperluas wildcard; tanda kutip ganda akan bekerja sama baiknya dalam hal ini.
    • - berarti ini adalah pola kecualikan.
    • Yang memimpin / berarti polanya harus dimulai dari dirA/ (rsync "transfer-root").
    • Itu */* bagian dari pola mengacu pada apa pun di dalam subdirektori.
    • Trailing / membatasi pengecualian pada direktori. File di dalam subdirektori dari dirA/ tidak terpengaruh.

Jadi pada akhirnya, rsync menyalin tidak lebih dari satu level ke bawah (dan juga tidak membuat direktori level kedua).


2
Sangat bagus! Saya bisa menggunakannya -f '- /*/' untuk membatasi hanya file level atas. Saya juga harus menentukan -f '- .*' untuk mengecualikan file dot, karena saya menyinkronkan direktori home.
haridsv

4

Solusi di atas (oleh PleaseStand) tidak berfungsi untuk saya karena beberapa alasan. Ini berhasil meskipun:

rsync -avc --no-r ./source/* ./destination/

Ada juga alternatif ini:

rsync -avc --exclude " / "./source/ ./tujuan/


0

Salah satu "fitur" dari rsync adalah bagaimana direktori diurai.

rsync /dirA/ host:/dirB/ dan rsync /dirA host:/dirB secara teoritis harus setara.

Karena tidak ingin mendorong kekambuhan, Anda ingin menghindari -r, -a yang selain hal-hal lain menyiratkan -r.

Saya masih belum selesai dengan penelitian, tetapi ini adalah jawaban awal saya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.