ฉันสามารถอัพโหลดทั้งโฟลเดอร์โดยใช้ FTP ได้หรือไม่?


29

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

คำตอบ:


24

หากคุณใช้ไคลเอนต์บรรทัดคำสั่ง ftp มาตรฐานคำMPUTสั่งจะอนุญาตให้คุณถ่ายโอนไฟล์ทั้งหมดที่ตรงกับรูปแบบ (เชลล์ glob-style) ดังนั้นMPUT *จะส่งไฟล์ทั้งหมดในไดเรกทอรีปัจจุบัน นอกจากนี้ยังมีMGETการดึงไฟล์ที่ตรงกับรูปแบบ

โดยค่าเริ่มต้นทั้งสองMPUTและMGETจะพร้อมท์ว่าจะถ่ายโอนแต่ละไฟล์ก่อนทำเช่นนั้นหรือไม่ คุณอาจต้องการปิดพรอมต์ด้วยคำสั่ง "PROMPT" (ไม่มีข้อโต้แย้งมันเป็นสลับ)


แต่เดิมคำถามนี้มาจาก stackoverflow ดังนั้นฉันรู้สึกว่าควรเป็นคำตอบที่ยอมรับได้ แม้ว่าผู้ถามดั้งเดิมดูเหมือนว่าจะหายไปดังนั้นจะไม่ยอมรับใครสักคน ....
codetaku

คำเตือน: ไคลเอนต์บรรทัดคำสั่ง FTP ที่มาพร้อมกับ Windows ไม่รองรับโหมดพาสซีฟดังนั้นการใช้เทคนิคนี้อาจทำให้คุณเสียเวลา มันทำในกรณีของฉันเนื่องจากฉันต้องการอัปโหลดไฟล์และใช้บรรทัดคำสั่ง Windows ที่มีเครื่องมือติดตั้ง
sean2078

1
มันจะถ่ายโอนไฟล์ธรรมดาทั้งหมดในไดเรกทอรีปัจจุบัน แต่จะไม่ถ่ายโอนไดเรกทอรีใด ๆ ที่มีอยู่ซ้ำ มันจะไม่สนใจพวกเขาอย่างเงียบ ๆ
bergercookie

22

คุณสามารถใช้ ncftpput ทำดังต่อไปนี้:

  1. ติดตั้ง ncftp:

    yum install ncftp
    

ยำเป็นตัวพิมพ์เล็ก

อีกวิธีหนึ่งคือ:

    apt-get install ncftp

2. ดำเนินการคำสั่งต่อไปนี้:

    ncftpput -R -v -u "ftp-username" ftp.website.com ftp-upload-path local-path/*

Yum ควรเปลี่ยนเป็น yum - เนื่องจากเป็นกรณี ๆ ไป
olekeh

1
นี่คือตัวเลือก CLI ทั้งหมดสำหรับ ncftpput: ncftp.com/ncftp/doc/ncftpput.html
Olivier

8

ใช้ไคลเอนต์ FTP เช่น LeechFTP หรือ FileZilla หรือสิ่งที่คล้ายกัน หลายคนสาบานด้วย CuteFTP แต่มันเป็นแชร์แวร์สุดท้ายที่ฉันตรวจสอบ รองรับการถ่ายโอนโฟลเดอร์ทั้งหมดรวมถึงโครงสร้างไดเรกทอรี



5
  1. ให้ผู้ใช้ / ไคลเอนต์ซิปโฟลเดอร์
  2. อัปโหลดไฟล์ zip
  3. เครื่องรูดฝั่งเซิร์ฟเวอร์โฟลเดอร์

หมายเหตุ: คำตอบของฉันถูกโพสต์ที่ StackOverflow นั่นเป็นเหตุผลที่มันอ้างอิงโซลูชัน "การเข้ารหัส"
Chase Florell

2

บทช่วยสอนง่ายๆสำหรับมือใหม่ Windows อื่น ๆ เช่นฉันที่มาที่นี่:

วิธีที่ง่ายที่สุดในการอัปโหลดทั้งโฟลเดอร์ (ที่มีโฟลเดอร์ย่อยและไฟล์ทั้งหมด) คือ:

  1. ดาวน์โหลดไคลเอนต์ NcFTP (ฟรี แต่คุณสามารถบริจาคได้) จากลิงค์นี้
  2. เลือกNcFTP Client 3.2.5 สำหรับ Microsoft Windowsจากรายการ
  3. ติดตั้ง
  4. เมื่อเสร็จแล้วหน้าต่าง CMD ขนาดเล็กที่มีไอคอนเชอร์รี่จะปรากฏขึ้น คุณไม่ต้องการมัน
  5. เพียงเปิดหน้าต่าง CMD มาตรฐานและพิมพ์:
    ncftpput -u * yourUserNameHere * -p * yourUserPasswordHere * -R * www.yourWebsite.com * /
                     _C: \ yourFolderDirectoryHere \\ * _
    (เป็นหนึ่งบรรทัด)

โปรดทราบว่า:

  • -R เป็นธงสำหรับ "เวียนเกิด"; มันทำให้คำสั่งคัดลอกโฟลเดอร์ย่อยทั้งหมดซ้ำ
  • / (เครื่องหมายทับ) เป็นไดเรกทอรีรากของเว็บไซต์ของคุณ
  • C:\yourFolderDirectoryHere\* เลือกทุกอย่างภายใน C:\yourFolderDirectoryHere

ดูดี แต่เซิร์ฟเวอร์แบนไอพีของฉันบอกว่าฉันทำการเชื่อมต่อ 800 ครั้งในช่วงเวลาสั้น ๆ ไม่มีวิธีลดจำนวนการเชื่อมต่อ ปัญหาอีกอย่างคือฉันไม่รู้วิธีข้ามการอัปโหลดหากไฟล์ปลายทางมีอยู่แล้ว
16851556

2

ฉันจะเสนอคำตอบที่ - แม้ว่าจะเป็นสัตว์เดรัจฉานบริสุทธิ์และไม่สง่างามในน้อย - เป็นสิ่งเดียวที่ทำงานสำหรับฉันในบรรทัดคำสั่ง ฉันสร้างรายการไฟล์และใส่ลงในสคริปต์:

สร้างรายการไฟล์ของคุณ:

find my-dir -exec echo "put /Users/username/"{} {}  \;

คัดลอกและวางลงในสคริปต์:

#!/bin/bash

hostname="my-ftp-host"
username="username"
password="password"
ftp -in $hostname <<EOF
quote USER $username
quote PASS $password

binary
cd 123456
{COPY THE LIST HERE}
quit
EOF


0

FileZilla ยอดเยี่ยมสำหรับสิ่งนี้ หากคุณไม่ต้องการดาวน์โหลด / ติดตั้งอะไรก็สามารถทำได้ด้วย Internet Explorer Enable FTP folder view (outside of Internet Explorer)ไปลงในตัวเลือกขั้นสูงและเลือก จากนั้นคุณสามารถชี้หน้าต่าง explorer ที่เซิร์ฟเวอร์ FTP ของคุณและลากและวางไฟล์และโฟลเดอร์ระหว่าง windows explorer



0

dir เป้าหมายคือไฟล์ซิป คุณสามารถคัดลอกไฟล์ zip เต็มไปยังเซิร์ฟเวอร์ ftp โดยใช้รหัสด้านล่าง

//Taking source and target directory path
string sourceDir = FilePath + "Files\\" + dsCustomer.Tables[0].Rows[i][2].ToString() + "\\ConfigurationFile\\" + dsSystems.Tables[0].Rows[j][0].ToString() + "\\XmlFile";

string targetDir = FilePath + "Files\\Customers\\" + CustomerName + "\\" + SystemName + "\\";                                                                                       
foreach (var srcPath in Directory.GetFiles(sourceDir))
{
    //Taking file name which is going to copy from the sourcefile                                              
    string result = System.IO.Path.GetFileName(srcPath);

    //If that filename exists in the target path
    if (File.Exists(targetDir + result))
    {
        //Copy file with a different name(appending "Con_" infront of the original filename)
        System.IO.File.Copy(srcPath, targetDir + "Con_" + result);
    }
    //If not existing filename
    else
    {
        //Just copy. Replace bit is false here. So there is no overwiting.
        File.Copy(srcPath, srcPath.Replace(sourceDir, targetDir), false);
    }
}         

เยี่ยมมาก แต่โปรแกรมของคุณไม่ได้รวบรวม
DavidPostill

0

คำตอบของฉันคือคำตอบของ @dgig

คุณสามารถแสดงรายการไฟล์ทั้งหมดและบันทึก (รวมถึงคำสั่ง put) ลงในไฟล์:

find my-dir -exec echo "put /Users/username/"{} {} > list.txt \; 

จากนั้นใช้ sftp เพื่อประมวลผลไฟล์:

sftp -C -b sftpbatchfile.txt name@server

-Cสำหรับการบีบอัด-bสำหรับไฟล์แบตช์


สิ่งนี้ไม่ได้ใช้ FTP ตามที่ถาม sftpโปรแกรมใช้โปรโตคอล SFTP ซึ่งเป็นโปรโตคอลที่แตกต่างกันแม้ว่ามันจะมีตัวอักษรบางส่วนในการร่วมกัน และคุณไม่ได้แก้ไขสิ่งenter code hereที่เหลืออยู่
dave_thompson_085
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.