ฉันสงสัยว่ามันเป็นไปได้ที่get
ไฟล์ด้วยsftp
แต่ป้องกันไม่ให้ดาวน์โหลดไฟล์ที่มีอยู่แล้วในโฟลเดอร์ปลายทางอีกครั้งหรือไม่
ฉันสงสัยว่ามันเป็นไปได้ที่get
ไฟล์ด้วยsftp
แต่ป้องกันไม่ให้ดาวน์โหลดไฟล์ที่มีอยู่แล้วในโฟลเดอร์ปลายทางอีกครั้งหรือไม่
คำตอบ:
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 ได้
คุณสามารถใช้การ-a
ตั้งค่าสถานะสำหรับget
คำสั่ง:
$ sftp example.com
sftp> get -a hello.txt
คุณสามารถระบุ*
ให้ดาวน์โหลดไดเรกทอรีทั้งหมดได้แน่นอน
อย่างไรก็ตามมีข้อแม้อยู่เล็กน้อย
ตัวเลือกที่ดีกว่าคือการใช้rsync
:
rsync example.com:hello.txt
สิ่งนี้จะให้ไฟล์กับคุณเสมอบนเซิร์ฟเวอร์เพียงถ่ายโอนความแตกต่างระหว่างโลคัลและรีโมตสำเนาหากไฟล์แตกต่างกันและมีอยู่ในระดับสากล