rsync ไม่ซิงโครไนซ์ไฟล์. htaccess


93

ฉันพยายาม rsync ไดเร็กทอรี A ของ server1 ด้วยไดเร็กทอรี B ของ server2

นั่งอยู่ในไดเร็กทอรี A ของ server1 ฉันรันคำสั่งต่อไปนี้

rsync -av * server2::sharename/B

แต่สิ่งที่น่าสนใจคือมันซิงโครไนซ์ไฟล์และไดเร็กทอรีทั้งหมดยกเว้น. htaccess หรือไฟล์ที่ซ่อนอยู่ในไดเร็กทอรี A. ไฟล์ที่ซ่อนอยู่ในไดเร็กทอรีย่อยจะถูกซิงโครไนซ์

ฉันลองคำสั่งต่อไปนี้ด้วย:

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

แต่ผลลัพธ์ก็เหมือนกัน

แนวคิดใด ๆ ที่ทำไมไฟล์ที่ซ่อนอยู่ในไดเร็กทอรี A ไม่ได้รับการซิงโครไนซ์และวิธีแก้ไข ฉันทำงานในฐานะผู้ใช้รูท

ขอบคุณ


1
ฉันพอใจกับคำตอบเดียวคุณควรยอมรับ: meta.stackexchange.com/questions/5234/…
Kutzi

คำตอบ:


111

เนื่องจาก*โดยค่าเริ่มต้นจะขยายไปยังไฟล์ทั้งหมดในไดเร็กทอรีการทำงานปัจจุบันยกเว้นไฟล์ที่ชื่อขึ้นต้นด้วยจุด ดังนั้นrsyncอย่ารับไฟล์เหล่านี้เป็นอาร์กิวเมนต์

คุณสามารถส่ง.แสดงถึงไดเร็กทอรีการทำงานปัจจุบันไปที่rsync:

rsync -av . server2::sharename/B

วิธีนี้rsyncจะค้นหาไฟล์ที่จะถ่ายโอนในไดเร็กทอรีการทำงานปัจจุบันซึ่งต่างจากการค้นหาไฟล์ในสิ่งที่*ขยายไป

หรือคุณสามารถใช้คำสั่งต่อไปนี้เพื่อ*ขยายไฟล์ทั้งหมดรวมถึงไฟล์ที่ขึ้นต้นด้วยจุด:

shopt -s dotglob

ดูmanpage ของ shoptด้วย


8
แท้จริง '.' แก้ปัญหาเช่นrsync -avz user@domain.com:/remote/path/. /destination/pathทำงาน
Mariusz Nowak

57

สำหรับใครที่เป็นเพียงแค่พยายามที่จะไดเรกทอรีซิงค์ระหว่างเซิร์ฟเวอร์ (รวมถึงไฟล์ที่ซ่อนอยู่ทั้งหมด) - เช่นซิงค์somedirAในsource-serverการsomedirBบนเซิร์ฟเวอร์ปลายทาง - ลองนี้ :

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

สังเกตเครื่องหมายทับที่ส่วนท้ายของทั้งสองเส้นทาง ไวยากรณ์อื่น ๆ อาจนำไปสู่ผลลัพธ์ที่ไม่คาดคิด!


นอกจากนี้สำหรับฉันแล้วมันง่ายที่สุดในการดำเนินการrsyncคำสั่งจากเซิร์ฟเวอร์ปลายทางเพราะมันง่ายกว่าที่จะตรวจสอบว่าฉันมีสิทธิ์การเขียนที่ถูกต้อง (เช่นฉันอาจต้องเพิ่มsudoคำสั่งด้านบน)

อาจไปโดยไม่บอก แต่เห็นได้ชัดว่าผู้ใช้ระยะไกลของคุณต้องการการเข้าถึงแบบอ่านsomedirAบนเซิร์ฟเวอร์ต้นทางของคุณ :)


เป็นแฟล็ก -e ที่จะซิงค์.htaccessไฟล์หรือไม่?
Jesse Burcsik

1
@JesseBurcsik ไม่-e sshระบุวิธีการเชื่อมต่อ
tripleee

1
คุณเพียงแค่ต้องเฉือนต้นทางปลายทางก็ไม่สำคัญ
Jonas Stensved

28

ฉันมีปัญหาเดียวกัน

สำหรับฉันเมื่อฉันทำตามคำสั่งต่อไปนี้ไฟล์ที่ซ่อนไม่ได้รับ rsync'ed

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

แต่เมื่อฉันเพิ่มเครื่องหมายทับที่ส่วนท้ายของเส้นทางไฟล์ที่ซ่อนอยู่จะถูก rsync'ed

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

สังเกตเครื่องหมายทับที่ส่วนท้ายของเส้นทางตามที่ Brian Lacy กล่าวว่าเครื่องหมายทับเป็นกุญแจสำคัญ ฉันไม่มีชื่อเสียงในการแสดงความคิดเห็นในโพสต์ของเขาหรือฉันจะทำอย่างนั้น


1
เพียงเพิ่มลงshopt -s dotglobในสคริปต์ของคุณก่อน rsync
Pian0_M4n

3

ฉันคิดว่าปัญหาเกิดจากการขยายเชลล์ไวด์การ์ด ใช้. แทนที่จะเป็นดาว

พิจารณาเนื้อหาไดเร็กทอรีตัวอย่างต่อไปนี้

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

การขยายตัวแทนของเชลล์จะแปลรายการอาร์กิวเมนต์ที่โปรแกรม rsync ได้รับ

-av * server2::sharename/B

เป็น

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

ก่อนที่คำสั่งจะเริ่มดำเนินการ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.