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.


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.


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
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.