sftp - วิธีคัดลอกไฟล์จากโฟลเดอร์ที่ไม่มีอยู่ในโฟลเดอร์ปลายทางเท่านั้น


19

ฉันสงสัยว่ามันเป็นไปได้ที่getไฟล์ด้วยsftpแต่ป้องกันไม่ให้ดาวน์โหลดไฟล์ที่มีอยู่แล้วในโฟลเดอร์ปลายทางอีกครั้งหรือไม่

คำตอบ:


20

sftpมีความสามารถ จำกัด อย่างไรก็ตามgetคำสั่งมีตัวเลือกที่อาจใช้เคล็ดลับ: get -aทำการดาวน์โหลดบางส่วนเสร็จสมบูรณ์ดังนั้นหากไฟล์มีอยู่แล้วบนไคลเอนต์และอย่างน้อยมีขนาดใหญ่เท่ากับไฟล์บนเซิร์ฟเวอร์มันจะไม่ถูกดาวน์โหลด หากไฟล์มีอยู่ แต่สั้นกว่าจุดสิ้นสุดของไฟล์จะถูกถ่ายโอนซึ่งเหมาะสมถ้าไฟล์โลคัลเป็นผลิตภัณฑ์ของการดาวน์โหลดขัดจังหวะ

วิธีที่ง่ายที่สุดที่จะทำสิ่งที่ซับซ้อนมากกว่า SFTP คือการใช้SSHFS SSHFS เป็นระบบไฟล์ที่ใช้ SFTP เพื่อให้ระบบไฟล์ระยะไกลปรากฏเป็น filessytem ท้องถิ่น บนไคลเอนต์ SSHFS ต้องการFUSEซึ่งมีอยู่ใน unices ทันสมัยที่สุด บนเซิร์ฟเวอร์ SSHFS ต้องการ SFTP ถ้าเซิร์ฟเวอร์อนุญาต SFTP คุณสามารถใช้ SSHFS ได้

mkdir server
sshfs server.example.com:/ server
rsync -a server/remote/path /local/path/
fusermount -u server

โปรดทราบว่า rsync บน SSHFS ไม่สามารถใช้ประโยชน์จากอัลกอริทึมการถ่ายโอนเดลต้าเนื่องจากมันไม่สามารถคำนวณผลรวมตรวจสอบบางส่วนทางด้านระยะไกล ไม่เกี่ยวข้องสำหรับการดาวน์โหลดเพียงครั้งเดียว แต่สิ้นเปลืองหากคุณทำการซิงโครไนซ์ไฟล์ที่ได้รับการแก้ไข สำหรับการซิงโครไนซ์ไฟล์ที่แก้ไขที่มีประสิทธิภาพให้ใช้rsync -a server:/remote/path /local/path/แต่สิ่งนี้ต้องการการเข้าถึงเชลล์ SSH ไม่ใช่แค่การเข้าถึง SFTP การเข้าถึงเชลล์สามารถถูก จำกัด ให้ใช้คำสั่ง rsync ได้


7

คุณสามารถใช้การ-aตั้งค่าสถานะสำหรับgetคำสั่ง:

$ sftp example.com
sftp> get -a hello.txt

คุณสามารถระบุ*ให้ดาวน์โหลดไดเรกทอรีทั้งหมดได้แน่นอน

อย่างไรก็ตามมีข้อแม้อยู่เล็กน้อย

  • สิ่งนี้ไม่ทำงานบน OS X มันอาจไม่ทำงานในระบบอื่น ฉันทดสอบบน Ubuntu 15.04 แล้ว
  • ตัวเลือกนี้มีไว้เพื่อให้การดาวน์โหลดหยุดชะงัก หากไฟล์ของคุณมีการเปลี่ยนแปลงผลลัพธ์จะเป็นการดาวน์โหลดที่เสียหาย

ตัวเลือกที่ดีกว่าคือการใช้rsync:

rsync example.com:hello.txt

สิ่งนี้จะให้ไฟล์กับคุณเสมอบนเซิร์ฟเวอร์เพียงถ่ายโอนความแตกต่างระหว่างโลคัลและรีโมตสำเนาหากไฟล์แตกต่างกันและมีอยู่ในระดับสากล

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