rsync เป็นเครื่องมือที่ทรงพลังมากสำหรับการคัดลอกและซิงค์ไฟล์ ทั้งภายในเครื่องเดียวกันหรือระหว่างเซิร์ฟเวอร์ จุดเด่นของมันคือการส่งเฉพาะส่วนที่เปลี่ยนแปลง ทำให้ประหยัดเวลาและแบนด์วิดท์ครับ
คำสั่งพื้นฐาน
รูปแบบคำสั่งของ rsync จะคล้ายกับ cp ครับrsync [options] [ต้นทาง] [ปลายทาง]
Option ที่ใช้บ่อย
ส่วนใหญ่เรามักจะใช้ -avz ร่วมกันครับ
-a: คัดลอกแบบรักษาคุณสมบัติเดิมทั้งหมด และรวมไปถึงโฟลเดอร์ย่อย-v: แสดงรายละเอียดว่ากำลังคัดลอกไฟล์ไหนอยู่บ้าง-z: บีบอัดข้อมูลระหว่างส่ง ช่วยให้เร็วขึ้นเมื่อส่งผ่าน network--delete: ลบไฟล์ที่ปลายทาง ถ้าไฟล์นั้นถูกลบไปแล้วจากต้นทาง--dry-run: ลองรันเสมือนจริงเพื่อดูว่าจะเกิดอะไรขึ้นบ้าง แต่ยังไม่คัดลอกจริง
ตัวอย่างการใช้งานจริง
การคัดลอกภายในเครื่อง
rsync -av /path/to/source/ /path/to/destination/
ข้อควรระวัง: > * ถ้าใส่ / หลังชื่อโฟลเดอร์ต้นทาง (เช่น folder/) หมายถึง “คัดลอก ไฟล์ข้างใน โฟลเดอร์นั้น”
- ถ้าไม่ใส่
/(เช่นfolder) หมายถึง “คัดลอก ตัวโฟลเดอร์ นั้นไปด้วย”
การคัดลอกไปยัง Server อื่น
โดยปกติจะส่งผ่าน SSH ซึ่งมีความปลอดภัยสูงrsync -avz /local/path/ user@remote_host:/remote/path/
การดึงข้อมูลจาก Server กลับมาที่เครื่องเราrsync -avz user@remote_host:/remote/path/ /local/path/
เปรียบเทียบความต่างของไฟล์
หากคุณต้องการ เปรียบเทียบความต่างของไฟล์ ระหว่างสองโฟลเดอร์นี้โดย ไม่สนใจเวลาที่แก้ไข แต่เน้นดูที่เนื้อหาหรือโครงสร้างไฟล์ rsync มี Option ที่ตอบโจทย์นี้โดยเฉพาะครับ
คุณสามารถใช้คำสั่ง --dry-run ร่วมกับ Option การเปรียบเทียบดังนี้ครับ
เปรียบเทียบโดยใช้ Checksum
วิธีนี้ rsync จะข้ามการเช็ควันที่และขนาดไฟล์ แต่จะคำนวณค่า Checksum ของเนื้อหาไฟล์แทน ถ้าเนื้อหาเหมือนกันเป๊ะจะถือว่าเป็นไฟล์เดียวกันrsync -avnc --delete /Users/Shared/Gits/phunsanit/laravel/ /Users/Shared/Gits/phunsanit/laravel-polarized/
-nหรือ--dry-run: สำคัญมาก! เพื่อให้มันแค่ “แสดงความต่าง” ออกมาให้ดู แต่ไม่ไปเขียนทับหรือลบไฟล์จริง ๆ-cหรือ--checksum: บังคับให้เช็คที่เนื้อหาไฟล์ ไม่สนใจเวลา--delete: จะช่วยแสดงให้เห็นว่ามีไฟล์ไหนในlaravel-polarizedที่ไม่มีในต้นทาง
เปรียบเทียบเฉพาะขนาดไฟล์
ถ้าคุณมั่นใจว่าถ้าไฟล์ขนาดเท่ากันคือไฟล์เดียวกัน ให้ใช้ตัวนี้ครับrsync -avn --size-only /Users/Shared/Gits/phunsanit/laravel/ /Users/Shared/Gits/phunsanit/laravel-polarized/
ทางเลือกอื่น: ใช้คำสั่ง diff
หากคุณต้องการดูว่า “บรรทัดไหน” ใน Code ที่ต่างกัน ไม่ใช่แค่ดูว่าไฟล์ไหนต่างกัน แนะนำให้ใช้diffdiff -rq /Users/Shared/Gits/phunsanit/laravel /Users/Shared/Gits/phunsanit/laravel-polarized
-r: ดูลึกลงไปในทุกโฟลเดอร์ย่อย-q: สรุปสั้น ๆ แค่ว่าไฟล์ไหน “Differ” หรือ “Only in” โดยไม่พ่นเนื้อหา Code ออกมาทั้งหมด
เคล็ดลับเพิ่มเติม
- อยากดู Progress: เพิ่ม
--progressเข้าไปในคำสั่ง เพื่อดูความเร็วและเวลาที่เหลือ - การสำรองข้อมูล : หากคุณกำลังจะแก้ไขไฟล์ระบบอย่าง Nginx หรือ Config สำคัญ การใช้
rsyncทำ Snapshot หรือ Backup ไว้ในโฟลเดอร์อื่นก่อนเป็นเรื่องที่ดีมากครับ เช่นrsync -av /etc/nginx/ /etc/nginx_backup_$ (date +%F) /
อ่านเพิ่มเติม