rsync tidak menyinkronkan file .htaccess

91

Saya mencoba untuk rsync direktori A dari server1 dengan direktori B dari server2.

Duduk di direktori A server1, saya menjalankan perintah berikut.

rsync -av * server2::sharename/B

tetapi yang menarik adalah, ini mensinkronisasi semua file dan direktori kecuali .htaccess atau file tersembunyi di direktori A. Semua file tersembunyi di dalam subdirektori akan disinkronkan.

Saya juga mencoba perintah berikut:

rsync -av --include=".htaccess" * server2::sharename/B

tapi hasilnya sama saja.

Ada ide mengapa file tersembunyi dari direktori A tidak disinkronkan dan cara memperbaikinya. Saya menjalankan sebagai pengguna root.

Terima kasih

Ketenangan dlm menghadapi bahaya
sumber
1
Saya sudah puas dengan satu jawaban, Anda harus menerimanya: meta.stackexchange.com/questions/5234/…
Kutzi

Jawaban:

109

Ini karena fakta bahwa *secara default diperluas ke semua file di direktori kerja saat ini kecuali file yang namanya dimulai dengan titik. Jadi,rsync jangan pernah menerima file ini sebagai argumen.

Anda dapat meneruskan yang .menunjukkan direktori kerja saat ini ke rsync:

rsync -av . server2::sharename/B

Dengan cara ini rsyncakan mencari file untuk ditransfer di direktori kerja saat ini daripada mencarinya di apa* perluasan.

Atau, Anda dapat menggunakan perintah berikut untuk *memperluas ke semua file termasuk yang dimulai dengan titik:

shopt -s dotglob

Lihat juga halaman manual shopt .

Adam Zalcman
sumber
7
Memang '.' memecahkan masalah, misalnya rsync -avz [email protected]:/remote/path/. /destination/pathapakah pekerjaan itu
Mariusz Nowak
57

Bagi siapa saja yang hanya mencoba untuk direktori sinkron antara server (termasuk semua file yang tersembunyi) - misalnya, sinkronisasi somedirApada source-serverke somedirBpada server tujuan - coba ini :

rsync -avz -e ssh --progress user@source-server:/somedirA/ somedirB/

Perhatikan garis miring di ujung kedua jalur. Sintaks lainnya dapat memberikan hasil yang tidak diharapkan!


Selain itu, bagi saya yang paling mudah adalah melakukan rsyncperintah dari server tujuan, karena lebih mudah memastikan saya mendapat akses tulis yang tepat (yaitu, saya mungkin perlu menambahkansudo perintah di atas).

Mungkin tidak perlu dikatakan lagi, tetapi jelas pengguna jarak jauh Anda juga membutuhkan akses baca ke somedirAserver sumber Anda. :)

Brian Lacy
sumber
Apakah flag -e yang akan menyinkronkan .htaccessfile?
Jesse Burcsik
1
@JesseBurcsik Tidak, yang -e sshmenentukan metode untuk menghubungkan.
tripleee
1
Anda hanya perlu garis miring pada sumbernya, tujuan tidak menjadi masalah
Jonas Stensved
28

Saya memiliki masalah yang sama.

Bagi saya ketika saya melakukan perintah berikut, file yang tersembunyi tidak bisa disinkronkan

rsync -av /home/user1 server02:/home/user1

Tetapi ketika saya menambahkan garis miring di ujung jalur, file tersembunyi telah disinkronkan.

rsync -av /home/user1/ server02:/home/user1/

Perhatikan garis miring di ujung jalan , seperti yang dikatakan Brian Lacy bahwa garis miring adalah kuncinya. Saya tidak memiliki reputasi untuk mengomentari posnya atau saya akan melakukannya.

harleygolfguy
sumber
1
Cukup tambahkan shopt -s dotglobke skrip Anda sebelum rsync
Pian0_M4n
3

Saya pikir masalahnya adalah karena ekspansi wildcard shell. Gunakan. bukan bintang.

Perhatikan contoh konten direktori berikut

$ ls -a .
. .. .htaccess a.html z.js

Ekspansi karakter pengganti shell menerjemahkan daftar argumen yang didapat dari program rsync

-av * server2::sharename/B

ke

-av a.html z.js server2::sharename/B

sebelum perintah mulai dijalankan.

vkraemer.dll
sumber
3

Perintah *untuk rsynch agar tidak menyinkronkan file tersembunyi. Anda tidak boleh mengabaikannya.

DonCallisto
sumber