รายการดาวน์โหลด FTP ของพา ธ สัมบูรณ์


5

ฉันมีรายการเส้นทาง (สองพันพันรายการ) ที่แน่นอนไปยังไฟล์บนเซิร์ฟเวอร์ระยะไกลที่ฉันต้องดาวน์โหลดลงในพีซีของฉัน

ฉันต้องการไฟล์เพื่อให้โครงสร้างไดเรกทอรียังคงเหมือนเดิมสำหรับไฟล์เหล่านั้น

ตัวอย่าง:

/* UNIX Server File-System  */
/home/username/
    stuff/
    more-stuff/
    data/
    file1.txt

/* Local Windows File-System After Transfer  */
C:\Users\username\Documents\home\username\
    stuff\
    more-stuff\
    data\
    file1.txt

เป็นการดีที่ฉันจะใช้ FTP บางประเภทเพื่อรับไฟล์เหล่านั้นไปยังพีซีของฉัน อย่างไรก็ตามฉันไม่รู้โปรแกรมหรือคำสั่ง CLI ที่รองรับการรับรายการไฟล์ ฉันต้องการไฟล์เฉพาะจากไดเรกทอรีเฉพาะฉันไม่สามารถดาวน์โหลดทั้งไดเรกทอรีได้

คำถามของฉัน:ฉันจะใช้รายการพา ธ สัมบูรณ์เพื่อดาวน์โหลดไฟล์ไปยัง localhost ของฉันโดยอัตโนมัติได้อย่างไร (ในขณะที่การรักษาโครงสร้างไดเรกทอรียังคงเหมือนเดิม)

นอกจากนี้ฉันมีไฟล์เหล่านี้ในอาร์เรย์ PHP ดังนั้นฉันจึงสามารถส่งออกรายการเป็น JSON, CSV, XML และอื่น ๆ


1
คุณสามารถใช้rsync?
Hastur

คำตอบ:


3

ถ้าคุณคิดว่าคุณสามารถใช้rsyncกับสิ่งที่ชอบ

rsync -av --files-from=/path/yourlist.txt / remote:/backup

อยู่ที่ไหน

  • /path/yourlist.txt คุณสามารถใส่รายการไฟล์ด้วยพา ธ แบบเต็ม
  • /เส้นทางที่จะเพิ่มไปยังชื่อไฟล์ในรายการของคุณ (หากเป็นชื่อพา ธ เต็ม/)
  • remote:/backup ชื่อโฮสต์ระยะไกลและเส้นทางสัมพัทธ์

คุณสามารถอ่านเพิ่มเติมได้--files-fromจากman rsync [ 1 ]

--files จาก FILE =

Using this option allows you to specify the exact list of files to transfer (as
read from the specified FILE or - for standard input). It also tweaks the 
default  behavior of rsync to make transferring just the  specified files and 
directories  easier:
  • --relative (-R) ตัวเลือกที่จะบอกเป็นนัยซึ่งเก็บรักษาข้อมูลเส้นทางที่ระบุไว้สำหรับแต่ละรายการในแฟ้ม (ใช้ --no-ญาติหรือ --no-R ถ้าคุณต้องการที่จะเปิดที่ปิด)
  • --dirs (-d) ตัวเลือกที่จะบอกเป็นนัยซึ่งจะสร้างไดเรกทอรีที่ระบุในรายการปลายทางมากกว่าดังข้ามพวกเขา (ใช้ --no-dirs หรือ --no-d ถ้าคุณต้องการที่จะเปิดที่ปิด)
  • พฤติกรรมของตัวเลือก - เก็บถาวร (-a) ไม่ได้หมายความถึง --recursive (-r) ดังนั้นให้ระบุอย่างชัดเจนหากคุณต้องการ
  • ผลข้างเคียงเหล่านี้เปลี่ยนสถานะเริ่มต้นของ rsync ดังนั้นตำแหน่งของตัวเลือก --files จากบรรทัดคำสั่งไม่มีผลต่อการแยกวิเคราะห์ตัวเลือกอื่น ๆ (เช่น -a ทำงานเหมือนกันก่อนหรือหลัง - ไฟล์ - จากเช่นเดียวกับ - no-R และตัวเลือกอื่น ๆ ทั้งหมด)

... ในหน้าคนมีมากกว่า ...


นี่คือสิ่งที่ฉันกำลังมองหา!
นิโคลัสซัมเมอร์ส

ให้ดูดีในการช่วยเหลือ ... มีตัวเลือกที่น่าสนใจมากมายเช่นหลีกเลี่ยงการดาวน์โหลดไฟล์เดียวกันและอื่น ๆ อีกครั้ง ...
Hastur

ทางออกที่ดีที่สุดแน่นอน
MariusMatutiae

5

wgetมีฟังก์ชั่นที่คุณกำลังมองหา จาก manpage:

-i file
       --input-file=file
           Read URLs from a local or external file.  If - is specified as file, URLs are read from the standard input.  (Use ./- to read from a file literally named -.)

ในคำอื่น ๆ : wget -i filelist.txt.

ไม่จำเป็นต้องเป็นไฟล์ txt เช่นกันเพราะ wget รองรับ html ผ่าน--force-htmlสวิตช์ หากสิ่งที่คุณมีคือรายการไดเรกทอรี / ไฟล์คุณสามารถตั้งค่า URL ฐานในบรรทัดคำสั่งด้วย--baseสวิตช์


เขาบอกว่า ftp คุณสามารถยกตัวอย่าง ftp ด้วย wget ได้หรือไม่?
barlop

@barlop ไวยากรณ์เหมือนกันโดยไม่คำนึงถึงโปรโตคอล ความแตกต่างเพียงอย่างเดียวคือเนื้อหาของ filelist.txt โดยอ้างอิงโปรโตคอล ftp พร้อมftp://คำนำหน้า
Jarmund

และผู้ใช้ / ผ่านมีมูลค่ารวมถึง URL เช่น"ftp://username:password@blah.xyz"
barlop

นี้ไม่ได้แก้ปัญหาอย่างเต็มที่ OP ที่ระบุไว้... ขณะที่การรักษาโครงสร้างไดเรกทอรีเหมือนเดิม โดยการใช้wget คุณกำลังวางไฟล์ทั้งหมดในไดเรกทอรีเดียวกัน
MariusMatutiae

2

อย่างไรก็ตามฉันไม่รู้โปรแกรมหรือคำสั่ง CLI ที่รองรับการรับรายการไฟล์

ฉันไม่แน่ใจว่าทำไมจึงควรเป็นสิ่งที่ทำให้สะดุด คุณสามารถเรียกใช้ftpสคริปต์เป็นแหล่งที่มาของมัน

cd Target_Directory
ftp -v -s:script.ftp ftp.myhost.net 1> /absolute/path/to/my/logfile 2>&1

ที่Target_Directoryที่คุณต้องการวางไฟล์ที่จะดาวน์โหลดและscript.ftpเป็นไฟล์สคริปต์เช่นนี้:

USER MyUserId
MyPassword
cd SOURCE_DIR
binary
prompt n
mget the_first_file_I_need
mget the_second_file_I_need
bye

นี้เป็นที่ดีสำหรับเว็บไซต์เดียว มีเว็บไซต์กี่ไซต์? คุณสามารถสร้างไฟล์สคริปต์เรียกมันว่า script_main ด้วยบรรทัดต่อไปนี้:

cd Target_Directory_1
ftp -v -s:script_1.ftp ftp.myhost_1.net 1>> /absolute/path/to/my/logfile 2>>&1
cd Target_Directory_2
ftp -v -s:script_2.ftp ftp.myhost_2.net 1>> /absolute/path/to/my/logfile 2>>&1
....

และอื่น ๆ คุณสามารถจัดเตรียมscrip_N.ftpไฟล์โดยแยกวิเคราะห์ข้อมูลที่คุณมีเป็นไฟล์ที่แยกกัน


2

aria2อาจเป็นไปได้

จากเอกสาร :

-d, --dir =

ไดเรกทอรีเพื่อจัดเก็บไฟล์ที่ดาวน์โหลด

-i, - อินพุตไฟล์ =

ดาวน์โหลด URIs ที่อยู่ใน FILE คุณสามารถระบุแหล่งที่มาหลายแห่งสำหรับเอนทิตีเดียวได้โดยใส่ URI หลายรายการไว้ในบรรทัดเดียวคั่นด้วยอักขระ TAB นอกจากนี้ยังสามารถระบุตัวเลือกหลังจากแต่ละบรรทัด URI บรรทัดตัวเลือกจะต้องเริ่มต้นด้วยอักขระเว้นวรรคหนึ่งตัวหรือมากกว่า (SPACE หรือ TAB) และต้องมีหนึ่งตัวเลือกต่อบรรทัดเท่านั้น ไฟล์อินพุตสามารถใช้การบีบอัด gzip

สิ่งนี้จะต้องมีอินพุตไฟล์แยกกันสำหรับแต่ละไดเรกทอรี

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