rsync .htaccess dosyasını senkronize etmiyor


91

Sunucu1'in A dizinini sunucu2'nin B diziniyle eşzamanlamaya çalışıyorum.

Sunucu1'in A dizininde otururken aşağıdaki komutları çalıştırdım.

rsync -av * server2::sharename/B

ancak ilginç olan, .htaccess veya A dizinindeki herhangi bir gizli dosya dışındaki tüm dosyaları ve dizinleri senkronize etmesidir. Alt dizinlerdeki tüm gizli dosyalar eşitlenir.

Ayrıca aşağıdaki komutu da denedim:

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

ancak sonuçlar aynı.

Bir dizinin gizli dosyalarının neden senkronize edilmediği ve nasıl düzeltileceği hakkında herhangi bir fikir. Root kullanıcısı olarak çalışıyorum.

Teşekkürler


1
Bir cevaptan memnun kaldım, kabul etmelisiniz: meta.stackexchange.com/questions/5234/…
Kutzi

Yanıtlar:


109

Bunun nedeni *, adı bir noktayla başlayan dosyalar dışında, varsayılan olarak geçerli çalışma dizinindeki tüm dosyalara genişletilmesidir. Bu nedenle, rsyncbu dosyaları hiçbir zaman bağımsız değişken olarak almaz.

.Geçerli çalışma dizinini belirten şu adrese geçebilirsiniz rsync:

rsync -av . server2::sharename/B

Bu şekilde rsync, *genişleyen şeyde aramak yerine, mevcut çalışma dizininde aktarılacak dosyaları arayacaktır .

Alternatif olarak, *nokta ile başlayanlar dahil tüm dosyalara genişletmek için aşağıdaki komutu kullanabilirsiniz :

shopt -s dotglob

Ayrıca alışveriş kılavuz sayfasına bakın .


7
Aslında '.' sorunu çözer, örneğin rsync -avz user@domain.com:/remote/path/. /destination/pathişi yapar
Mariusz Nowak

57

Senkronize örneğin - sadece (bütün gizli dosyaları dahil) sunucular arasında senkronizasyon dizinleri çalışıyor herkes için somedirAüzerinde source-serverhiç somedirBbir hedef sunucuda - Bu deneyin :

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

Her iki yolun sonundaki eğik çizgilere dikkat edin. Başka herhangi bir sözdizimi beklenmedik sonuçlara yol açabilir!


Ayrıca, benim rsynciçin hedef sunucudan komutları gerçekleştirmek en kolay yoldur , çünkü uygun yazma erişimim olduğundan emin olmak daha kolaydır (yani, sudoyukarıdaki komuta eklemem gerekebilir ).

Muhtemelen söylemeye gerek yok, ancak tabii ki uzaktaki kullanıcınızın da somedirAkaynak sunucunuzda okuma erişimine ihtiyacı var . :)


.htaccessDosyayı senkronize edecek olan -e işareti miydi ?
Jesse Burcsik

1
@JesseBurcsik Hayır, -e sshbağlanma yöntemini belirtir.
üçlü

1
Kaynakta kesik çizgiye ihtiyacınız var, hedef önemli değil
Jonas Stensved

28

Ben de aynı sorunu yaşadım.

Benim için aşağıdaki komutu gizli dosyalar yoktu ne zaman değil rsync'ed olsun

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

Ancak yolların sonuna bölü çizgileri eklediğimde, gizli dosyalar rsync'lendi.

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

Brian Lacy'nin kesik çizgilerin anahtar olduğunu söylediği gibi , yolların sonundaki eğik çizgilere dikkat edin. Onun gönderisine yorum yapacak itibarım yok yoksa bunu yapardım.


1
shopt -s dotglob
Rsync'den

3

Sanırım sorun kabuk joker karakter genişlemesinden kaynaklanıyor. Kullanın. yıldız yerine.

Aşağıdaki örnek dizin içeriğini düşünün

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

Kabuğun joker karakter genişletmesi, rsync programının aldığı argüman listesini çevirir.

-av * server2::sharename/B

içine

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

komut yürütülmeye başlamadan önce.


3

*Gizli dosyaları senkronize değil rsynch için söyle. Onu ihmal etmemelisin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.