RSYNC ไฟล์เดียวได้อย่างไร?


95

ขณะนี้ฉันเพียง RSync-ing Directoriesดังต่อไปนี้:

* * * * * rsync -avz /var/www/public_html/images root@<remote-ip>:/var/www/public_html

แล้วฉันจะทำอย่างไรrsyncไฟล์เดียวเช่น/var/www/public_html/.htaccess?

คำตอบ:


160

คุณทำเช่นเดียวกับที่คุณทำกับไดเร็กทอรี แต่คุณระบุเส้นทางแบบเต็มไปยังชื่อไฟล์เป็นแหล่งที่มา ในตัวอย่างของคุณ:

rsync -avz   --progress  /var/www/public_html/.htaccess root@<remote-ip>:/var/www/public_html/

ตามที่ระบุไว้ในความคิดเห็นที่: ตั้งแต่-aมีrecurseหนึ่งพิมพ์ผิดเล็ก ๆ น้อย ๆ สามารถทำให้มันเตะออกโอนต้นไม้ไดเรกทอรีเต็มรูปแบบเพื่อให้หลักฐานโง่วิธีการอาจจะมากขึ้นในการใช้งานเพียงหรือแทนที่ด้วย-vz-lptgoD


19
นอกจากนี้หากคุณส่งเพียงไฟล์เดียวคุณอาจต้องการเพิ่มพารามิเตอร์ "--progress" เพื่อให้คุณสามารถดูความคืบหน้าได้
JoshStrange

หมายความว่าคุณยังต้องการโมดูลใน rsyncd.conf ที่มีไดเร็กทอรีอยู่เหนือไฟล์ (เช่นด้วยการลบตัวเลือกการปฏิเสธ) หรือคุณสามารถอัปโหลดไฟล์ที่ใดก็ได้บนเซิร์ฟเวอร์โดยระบุเส้นทางได้หรือไม่ หน้าคนไม่ชัดเจนเกี่ยวกับเรื่องนี้

3
-a รวมถึงการเรียกซ้ำและไม่จำเป็นสำหรับไฟล์เดียวไม่แน่ใจว่าฉันจะใช้แฟล็กนั้นสำหรับไฟล์เดียวหรือไม่เนื่องจากอาจทำให้เกิดพฤติกรรมที่ไม่ได้ตั้งใจหากชื่อไฟล์กลายเป็นไดเร็กทอรีโดยไม่ได้ตั้งใจ
redanimalwar

2
--partial --stats --progress << แฟล็กเหล่านี้มีประโยชน์หากเป็นไฟล์ที่มีขนาดใหญ่มากและอาจต้องกลับมาทำงานใหม่หลังจากการโอนเสีย
Ahi Tuna


14

คำตอบของ Michael Place ใช้งานได้ดีถ้าเทียบกับไดเรกทอรีรากสำหรับทั้งซอร์สและเป้าหมายไดเร็กทอรีทั้งหมดในพา ธ ของไฟล์มีอยู่แล้ว

แต่ถ้าคุณต้องการซิงค์ไฟล์กับเส้นทางต้นทางนี้:

/ source-root / a / b / ไฟล์

ไปยังไฟล์ที่มีเส้นทางเป้าหมายต่อไปนี้:

/ target-root / a / b / ไฟล์

และไดเรกทอรีaและbไม่มีอยู่?

คุณต้องรันคำสั่ง rsync ดังต่อไปนี้:

rsync -r --include="/a/" --include="/a/b/" --include="/a/b/file" --exclude="*" [source] [target]

2
การคัดลอกไฟล์แต่ละไฟล์ไปยังโฟลเดอร์ที่มีอยู่หรือสร้างโฟลเดอร์ไว้ล่วงหน้าจะปลอดภัยกว่าไม่ใช่หรือ? ในกรณีของการซิงค์เนื้อหาโฟลเดอร์หรือโฟลเดอร์ให้ rsync สร้างโฟลเดอร์ย่อยทั้งหมดหลังจากนั้นมันก็ใช้งานได้ แต่ในกรณีนี้มันยุ่งยากเกินไปและยุ่งยากมากเกินไปสำหรับพารามิเตอร์ - รวมเพื่อคัดลอกไฟล์แต่ละไฟล์
Tulains Córdova

@ user1598390 ฉันไม่แน่ใจว่าคุณกำลังสมมติหรือจินตนาการอยู่ในสถานการณ์ใดซึ่งสิ่งนี้จะปลอดภัยน้อยกว่า แต่ถ้าคุณพยายามจำรูปแบบเฉพาะของคำสั่งนี้และคุณไม่ได้ทำบ่อยๆก็น่าจะใช่ ปลอดภัยน้อยกว่าแล้วคัดลอกไฟล์เดียว มันอาจจะปลอดภัยกว่าถ้าไฟล์มีขนาดใหญ่เช่นเนื่องจาก rsync จะจัดการข้อผิดพลาดส่วนใหญ่ที่อาจเกิดขึ้นระหว่างการคัดลอกโดยอัตโนมัติ สำหรับบริบทบางอย่างไวยากรณ์ของฉันมีประโยชน์อย่างยิ่งสำหรับฉันเพราะฉันได้เขียนโค้ดที่สร้างคำสั่งในรูปแบบนี้ดังนั้นจากการทดสอบที่เพียงพอซึ่งครอบคลุมโค้ดที่เกี่ยวข้องคำสั่งเหล่านี้จึง 'ปลอดภัย'
Kenny Evitt

0

จนถึงปัจจุบันคำตอบสองข้อไม่ถูกต้องนักพวกเขาจะได้รับมากกว่าหนึ่งไฟล์และอีกไฟล์ไม่ง่ายอย่างที่คิดนี่คือคำตอบ IMO ที่ง่ายกว่า

ต่อไปนี้ได้รับไฟล์เดียว แต่คุณต้องสร้างไดเร็กทอรีปลายทางด้วย mkdir นี่อาจเป็นตัวเลือกที่เร็วที่สุด:

mkdir -p ./local/path/to/file
rsync user@remote:/remote/path/to/file/ -zarv --include "filename" --exclude "*" ./local/path/to/file/

หากมีไฟล์ใน / remote / path เพียงอินสแตนซ์เดียว rsync สามารถสร้างไดเร็กทอรีให้คุณได้หากคุณทำสิ่งต่อไปนี้ อาจต้องใช้เวลามากกว่านี้เล็กน้อยเนื่องจากค้นหาไดเรกทอรีเพิ่มเติม นอกจากนี้จะสร้างไดเร็กทอรีว่างสำหรับไดเร็กทอรีใน / remote / path ที่ไม่ได้อยู่ใน. / local

cd ./local
rsync user@remote:/remote/path -zarv --include "*/" --include "filename" --exclude "*" .

โปรดจำไว้ว่าลำดับของ - รวมและ - ไม่รวมมีความสำคัญ

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