วิธีคัดลอกเฉพาะไฟล์ใหม่โดยใช้คำสั่ง“ scp”


24

ผมได้รับการคัดลอกหลายร้อยไฟล์ไปยังคอมพิวเตอร์เครื่องอื่นโดยใช้scpคำสั่งที่ผมได้รับข้อผิดพลาดstalled ตอนนี้ฉันจะคัดลอกไฟล์อีกครั้ง มีวิธีใดที่จะหลีกเลี่ยงการคัดลอกไฟล์ที่ถูกคัดลอกไปแล้ว?

คำตอบ:


40

คุณสามารถใช้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

ถูก--ignore-existingต้องจริงๆ?
Meysam

เพราะในตัวอย่างของคู่มือนี้rsync -t *.c foo:src/-> "นี่จะถ่ายโอนไฟล์ทั้งหมดที่ตรงกับรูปแบบ * .c จากไดเรกทอรีปัจจุบันไปยังไดเรกทอรี src บนเครื่อง foo หากไฟล์ใด ๆ ที่มีอยู่แล้วในระบบระยะไกลแล้ว rsync ระยะไกล - โพรโทคอลการอัปเดตใช้เพื่ออัปเดตไฟล์โดยส่งความแตกต่างเท่านั้น "
Meysam

1
rsync -avuzh /source/path/ host:/destination/pathฉันมักจะใช้ นั่นคืองานทั้งหมดในคำสั่งเดียวและในการเรียกใช้ครั้งต่อไปจะถ่ายโอนไฟล์ที่ต้องการเท่านั้น
Edward Falk

6

หากคุณต้องการใช้ scp ด้วยเหตุผลใดก็ตามคุณอาจลบการอนุญาตwในข้อมูลท้องถิ่นของคุณ (หากคุณมีสิทธิ์ที่จะทำ) และ scp จะไม่แตะต้องมัน เพื่อให้แม่นยำยิ่งขึ้น:

  1. chmod a-w local/*.tar.gz (ใน dir ท้องถิ่นของคุณ)
  2. scp remote/*.tar.gz local

มันไม่ได้มีประสิทธิภาพดี แต่อาจช่วยได้หากคุณต้องการโซลูชันชั่วคราวที่รวดเร็วโดยไม่ต้องเปลี่ยนเป็นอย่างอื่นนอกจาก scp (รุ่งโรจน์: SCP โดยไม่ต้องแทนที่ไฟล์ที่มีอยู่ในปลายทาง )


ฉันชอบวิธีนี้มาก ฉันกำลังรวบรวมไฟล์จากเซ็นเซอร์ระยะไกลลงในที่เก็บถาวร ไดเร็กตอรี่ทั้งหมดที่ทำงาน - แต่ละอันมีไฟล์ย่อย เมื่อไฟล์เข้าสู่ไฟล์เก็บถาวรจะไม่มีการเปลี่ยนแปลง มันจะง่ายมากที่จะทำเครื่องหมายไฟล์ที่เก็บถาวรเป็น -w ดังนั้นนี่จะเป็นสิ่งที่ฉันทำ และไฟล์ทำงานที่อยู่นอกไดเรกทอรีเก็บถาวรสามารถทิ้งได้ตามที่เป็นดังนั้นหากฉันรันโปรแกรมอัปเดตในระหว่างวันมันจะยังคงคัดลอกไฟล์ที่อยู่ระหว่างดำเนินการ นี่คือสิ่งที่ฉันกำลังมองหา TNX มาก!
SDsolar

4

ไม่มีคำตอบที่แน่ชัดเกี่ยวกับวิธีการทำสิ่งนี้กับ SCP เนื่องจากเป็นสิ่งที่ถามมา

sudo find /files/ -type f -exec chmod a-w {} \;

scp -r username@server.com:/file/location/* /files

เมื่อคัดลอกไฟล์เสร็จแล้วให้เปลี่ยนการอนุญาตกลับคืน:

sudo chmod a+w -R /files


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