rsync: cara mengecualikan direktori paling atas

14

Jadi, saya memiliki masalah yang tampaknya sederhana, tetapi sejauh ini saya belum menemukan solusi: Saya ingin mengecualikan direktori paling atas dari rsync, sementara masih menyinkronkan semua anak-anaknya. Masalah khusus adalah bahwa saya tidak memiliki izin untuk mengubah waktu direktori paling atas, tetapi ingin semua anak memiliki waktu yang disinkronkan dengan benar.

Perintah rsync yang saya gunakan adalah sebagai berikut:

rsync --exclude ./ -rlptDu ./ server.example.com:/usr/local/directory/

dan server.example.com:/usr/local/directory/terlihat seperti ini:

drwxrws---  5 root   staff 24576 Jul  9 15:00 .

(pengguna lokal saya adalah anggota staff)

Ketika saya menjalankan rsync, saya mendapatkan kesalahan berikut:

rsync: failed to set times on "/usr/local/directory/.": Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1070) [sender=3.0.9]
make: *** [pub_to_mel_internal] Error 23

Ini adalah versi 3.0.9 pada mesin lokal dan 3.0.7 pada remote, kedua mesin menjalankan Debian.

Steve Pomeroy
sumber
Apakah Anda terbiasa dengan sintaks dalam contoh ini: wirespeed.xs4all.nl/mediawiki/index.php/... Ini memungkinkan Anda untuk memasukkan file / direktori tertentu dari direktori yang tidak termasuk. Anda mungkin perlu menggunakan file pengecualian.
jippie
Ya. Masalahnya adalah bahwa saya tidak bisa meyakinkan untuk mengecualikan direktori tingkat atas (khusus). Saya belum pernah mengalami masalah dengan pencampuran termasuk / tidak termasuk di masa lalu, sepertinya tingkat atas adalah kasus khusus.
Steve Pomeroy

Jawaban:

8

Saya pikir aturan filter rsync tidak bisa cocok dengan direktori tingkat atas, jadi selalu disinkronkan. Solusinya adalah menyinkronkan semua file di dalam direktori ini, bukan direktori itu sendiri.

rsync -rlptDu -- * server.example.com:/usr/local/directory/

Tambahkan .[!.]*setelah *jika Anda memiliki file titik di direktori paling atas, dan ..?*jika Anda memiliki nama file yang dimulai dengan dua titik.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
2
Keren terima kasih! Itu bekerja. Satu-satunya kelemahan teknik ini adalah ia membutuhkan shell untuk memilih semua file. Jika Anda memiliki banyak file di direktori (yang tidak saya miliki dalam kasus saya), mungkin tercekik. Itu mungkin bisa diperbaiki menggunakan xargs (walaupun tidak dengan opsi --delete).
Steve Pomeroy
Satu masalah yang saya dapatkan *adalah --deletetidak menghapus file, karena mereka bukan bagian dari pencarian.
thomasa88
@ thomasa88 Silakan lihat jawaban ini .
Kamil Maciorowski