คำตอบ:
คุณสามารถใช้rsync
มัน rsync
ได้รับการออกแบบมาจริงๆสำหรับการทำงานประเภทนี้
ไวยากรณ์:
rsync -avh /source/path/ host:/destination/path
หรือ
rsync -a --ignore-existing /local/directory/ host:/remote/directory/
เมื่อคุณเรียกใช้ครั้งแรกมันจะคัดลอกเนื้อหาทั้งหมดจากนั้นมันจะคัดลอกเฉพาะไฟล์ใหม่
หากคุณจำเป็นต้องจราจรในอุโมงค์ที่ผ่านการเชื่อมต่อ SSH (ตัวอย่างเช่นเพื่อวัตถุประสงค์ในการรักษาความลับ) ตามที่ระบุโดยคุณเดิมขอวิธีการแก้ปัญหาของ SCP-based, เพียงแค่เพิ่มพารามิเตอร์เพื่อ-e ssh
rsync
ตัวอย่างเช่น:
rsync -avh -e ssh /source/path/ host:/destination/path
rsync -t *.c foo:src/
-> "นี่จะถ่ายโอนไฟล์ทั้งหมดที่ตรงกับรูปแบบ * .c จากไดเรกทอรีปัจจุบันไปยังไดเรกทอรี src บนเครื่อง foo หากไฟล์ใด ๆ ที่มีอยู่แล้วในระบบระยะไกลแล้ว rsync ระยะไกล - โพรโทคอลการอัปเดตใช้เพื่ออัปเดตไฟล์โดยส่งความแตกต่างเท่านั้น "
rsync -avuzh /source/path/ host:/destination/path
ฉันมักจะใช้ นั่นคืองานทั้งหมดในคำสั่งเดียวและในการเรียกใช้ครั้งต่อไปจะถ่ายโอนไฟล์ที่ต้องการเท่านั้น
หากคุณต้องการใช้ scp ด้วยเหตุผลใดก็ตามคุณอาจลบการอนุญาตwในข้อมูลท้องถิ่นของคุณ (หากคุณมีสิทธิ์ที่จะทำ) และ scp จะไม่แตะต้องมัน เพื่อให้แม่นยำยิ่งขึ้น:
chmod a-w local/*.tar.gz
(ใน dir ท้องถิ่นของคุณ)scp remote/*.tar.gz local
มันไม่ได้มีประสิทธิภาพดี แต่อาจช่วยได้หากคุณต้องการโซลูชันชั่วคราวที่รวดเร็วโดยไม่ต้องเปลี่ยนเป็นอย่างอื่นนอกจาก scp (รุ่งโรจน์: SCP โดยไม่ต้องแทนที่ไฟล์ที่มีอยู่ในปลายทาง )
ไม่มีคำตอบที่แน่ชัดเกี่ยวกับวิธีการทำสิ่งนี้กับ SCP เนื่องจากเป็นสิ่งที่ถามมา
sudo find /files/ -type f -exec chmod a-w {} \;
scp -r username@server.com:/file/location/* /files
เมื่อคัดลอกไฟล์เสร็จแล้วให้เปลี่ยนการอนุญาตกลับคืน:
sudo chmod a+w -R /files
--ignore-existing
ต้องจริงๆ?