ซิงค์สองโฟลเดอร์ในเครื่องของทุบตี


23

ฉันมีโฟลเดอร์ "X" ขนาดใหญ่หนึ่งโฟลเดอร์ในโฮมไดเร็กตอรี่ของฉัน, และสำเนาที่ล้าสมัยนี้ในแฟลชไดรฟ์ - Y. อะนาล็อกคืออะไรrm Y; cp X Yแต่ไม่มีการเขียนทับไฟล์ที่มีอยู่แล้ว?

คำตอบ:


26

มีคุณสมบัติอื่น ๆ อีกมากมายที่จะrsyncกว่าคำตอบก่อนหน้านี้กล่าวถึง คุณควรตรวจสอบด้วยตนเอง:

man rsync

แต่สำหรับปัญหาของคุณฉันขอแนะนำ:

rsync -a --delete X Y

วิธีนี้ผู้รับ (Y) จะลบไฟล์ใด ๆ ที่มีที่ไม่ได้อยู่ใน X ตรวจสอบให้แน่ใจว่าคุณทำถูกต้อง ใช้ไม่ถูกต้องเนื่องจาก root สามารถฆ่าระบบของคุณได้อย่างง่ายดาย ... :)


1
ยอมรับว่าคุณควรระมัดระวังในเรื่องนี้ ลองเพิ่ม - พยายามรันคำสั่งเพื่อดูว่าจะเกิดอะไรขึ้นโดยไม่ทำการเปลี่ยนแปลงใด ๆ ถ้ามันไปได้ดีทำคำสั่งเดียวกันโดยไม่ - วิ่ง
แห้ง

การแก้ไขเล็กน้อยที่ต้องใช้เวลาพอrsync -a --delete X/ Yสมควร เครื่องหมายสแลชเล็กน้อยหลังจาก X ทำให้มันทำงานตามที่ตั้งใจไว้สำหรับฉันดังนั้นมันอาจช่วยคนอื่นได้เช่นกัน อธิบายที่นี่: abbeyworkshop.com/howto/unix/nix_rsync/index.html
Shovalt

15

ลองดูที่rsync (1) มันตั้งใจที่จะทำในสิ่งที่คุณต้องการ

rsync -av X Y

สนับสนุนการคัดลอกระยะไกลผ่านโปรโตคอลหรือ ssh ของตัวเอง แต่ยังสามารถใช้ในเครื่อง

ขึ้นอยู่กับพฤติกรรมที่แน่นอนที่คุณต้องการคุณอาจต้องการผ่าน--updateตัวเลือก สิ่งนี้จะบอก rsync ว่าจะไม่เขียนทับไฟล์ที่มีอยู่แล้วบนเป้าหมายและใหม่กว่าไฟล์ในแหล่งที่มา

หากคุณต้องการลบไฟล์เพิ่มเติม (เช่นไฟล์ที่มีอยู่ใน Y แต่ไม่ใช่ใน X) คุณสามารถเพิ่ม--deleteตัวเลือกได้


แต่มันจะไม่ลบไฟล์มากกว่าถูกลบใน X ในขณะที่rm Y; cp X Yจะ

เพื่อที่จะลบไฟล์ที่ถูกลบออกจาก X ใช้ตัวเลือก - ลบ
csonuryilmaz

0

ลองใช้ rsnyc, อาจเป็นไปได้ด้วยคำสั่งต่อไปนี้:

rsync -avzu /home/x /y

-u = อย่าเขียนทับไฟล์ที่ปลายทางหากมีการแก้ไข


แต่มันจะไม่ลบไฟล์มากกว่าถูกลบใน X ในขณะที่rm Y; cp X Yจะ

0

ฉันคิดว่าฟังก์ชั่นบางอย่างที่คุณกำลังมองหาในตัวเลือก -u (อัพเดต) มีอยู่จริงในตัวเลือกนี้:

"--ignore-existing" - ข้ามการอัปเดตไฟล์ที่มีอยู่ในผู้รับ

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