วิธีอัปโหลดไดเรกทอรีซ้ำไปยังเซิร์ฟเวอร์ FTP เพียงแค่ใช้ ftp หรือ lftp


19

ฉันกำลังเขียนสคริปต์เชลล์ Linux เพื่อคัดลอกโลคัลไดเร็กทอรีไปยังเซิร์ฟเวอร์รีโมต (ลบไฟล์ใด ๆ ที่มีอยู่)

เซิร์ฟเวอร์ในพื้นที่: ftpและlftpคำสั่งมีให้ใช้งานไม่มี ncftpหรือเครื่องมือกราฟิกใด ๆ

เซิร์ฟเวอร์ระยะไกล:เข้าถึงได้ผ่าน FTP เท่านั้น ไม่มี rsync หรือ SSH หรือ FXP

ฉันกำลังคิดเกี่ยวกับการแสดงรายการไฟล์โลคัลและรีโมตเพื่อสร้างสคริปต์ lftp จากนั้นรัน มีวิธีที่ดีกว่า?

หมายเหตุ: การอัปโหลดเฉพาะไฟล์ที่ถูกแก้ไขจะเป็นข้อดี แต่ไม่จำเป็น


ncftp หมดคำถามหรือไม่ จะเป็น imho ที่ง่ายที่สุด (และฉันรู้ว่ามันจะทำมันเป็นผมใช้วิธีการที่)
Sirex

Sirex: ฉันอยากจะใช้เครื่องมือที่มากับ RedHat เป็นค่าเริ่มต้น หาก lftp ไม่สามารถใช้งานได้ฉันจะเพิ่มข้อกำหนดสำหรับผู้ใช้ในการติดตั้ง ncftp
Nicolas Raoul

ไวยากรณ์สำหรับwput(เป็น wget เหมือน ftp-uploader):wput dir/ ftp://user:pass@host/dir
kenorb

คำตอบ:


39

lftpควรสามารถทำได้ในขั้นตอนเดียวโดยเฉพาะกับlftp mirror:

แก้ไข: ไวยากรณ์คำสั่ง lftp ทำให้เกิดความสับสนการร้องขอต้นฉบับที่ฉันโพสต์ไม่ทำงาน ลองแบบนี้:

lftp -e "mirror -R {local dir} {remote dir}" -u {ชื่อผู้ใช้}, {รหัสผ่าน} {host}

สังเกตเครื่องหมายคำพูดรอบ ๆ อาร์กิวเมนต์ไปยัง-eสวิตช์


1
+1 สำหรับการให้ทิปฉันว่าโหมดมิเรอร์ของ lftp ใช้ได้แม้ว่า FXP จะไม่สามารถใช้งานได้ (ฉันมั่นใจในสิ่งที่ตรงกันข้ามหลังจากอ่านtutorials.papamike.ca/pub/lftp.htmlซึ่งบอกว่า "เซิร์ฟเวอร์ทั้งสองต้องรองรับโปรโตคอลนี้เพื่อให้การดำเนินการนี้ประสบความสำเร็จ ") อย่างไรก็ตามคำสั่งนี้ล้มเหลวบนเซิร์ฟเวอร์ Ubuntu ของฉัน: lftp: mirror: ไม่ทราบชื่อหรือบริการ, คำสั่งที่ไม่รู้จัก `-R '
Nicolas Raoul

ฉัน reworded คำตอบของฉันด้วยการร้องขอ LFTP ที่ดีขึ้นหวังว่าจะช่วยได้
Phil Hollenback

ในที่สุดฉันก็ไปทำงาน! ดูเหมือนว่าคุณต้องสลับรีโมตและโลคัลเพื่อให้ทำงานได้ โปรดอัปเดตและฉันจะยอมรับคำตอบนี้ นี่คือบรรทัดคำสั่งที่ใช้งานได้: lftp -e "mirror -R / tmp / mylocalfiles / var / www" -u remoteuser, remotepassword remoteserver
Nicolas Raoul

ฉันคิดว่าฉันเห็นในเอกสาร lftp ที่คุณต้องเปลี่ยน dir ท้องถิ่นและระยะไกลเมื่อใช้ -R แต่ฉันต้องลืม อัปเดตคำตอบของฉัน
Phil Hollenback

มันล้มเหลวอย่างไร คุณได้ลองเรียกใช้ 'lftp -vvv' เพื่อรับเอาต์พุต verbose เพิ่มเติมเพื่อพิจารณาว่ากำลังพยายามทำอะไรอยู่?
Phil Hollenback

1

ตามแนวคิดของ Phil ในการใช้โหมดมิรเรอร์ของ lftp คำสั่งนี้ทำการหลอกลวง:

lftp -c 'open -e "mirror /tmp/thedir ftp://nico:mypass@remotehost/~/destination/" ftp://nico:mypass@localhost'

ข้อเสียคือต้องใช้เซิร์ฟเวอร์ภายในเพื่อให้เซิร์ฟเวอร์ FTP ทำงาน


1
cd {local_dir}
lftp {server}
cd {remote_dir}
mput {local_dir}/*

สิ่งนี้ใช้ได้กับฉันความพยายามอื่น ๆ อีกมากมายล้มเหลว ครั้งเดียวใน lftp ข้อมูลเพิ่มเติมสามารถดูได้ผ่าน:

help mput

2
มันอาจจะดีกว่าที่จะใช้mirror -Rที่นี่
gauteh

@gauteh คุณพูดถูก คำตอบที่ดีที่สุด ^
austin

0

ในที่สุดได้รับคำตอบ !!! สร้างเชลล์สคริปต์ ftpmirror.sh

#!/bin/bash 
path = /local-dir-path
lftp -e "mirror -R $path /$path" -u username,password ftp-server-ip
  • Path = ไดเรกทอรีภายในที่เราต้องการคัดลอกไปยังเซิร์ฟเวอร์ ftp
  • ชื่อผู้ใช้ = ชื่อผู้ใช้เซิร์ฟเวอร์ ftp
  • รหัสผ่าน = รหัสผ่านเซิร์ฟเวอร์ ftp
  • ftp-server-ip = ที่อยู่ IP ของเซิร์ฟเวอร์ ftp

หากไม่ได้ติดตั้งแพ็คเกจ lftp ให้ติดตั้งโดยใช้ yum

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