28

I need to upload a full folder using FTP. Is there is any option for transferring a folder and all of its contents at once?

migrated from stackoverflow.com Apr 12 '11 at 13:21

This question came from our site for professional and enthusiast programmers.

11 Answers 11

23

If you're using a standard command-line ftp client, the MPUT command will allow you to transfer all files matching a (shell glob-style) pattern, so MPUT * will send all files in the current directory. There is also MGET to retrieve files matching a pattern.

By default, both MPUT and MGET will prompt for whether to transfer each file before doing so. You'd probably want to turn off prompting with the "PROMPT" command (no argument; it's a toggle).

  • This question originally came from stackoverflow, so I feel that it should be the accepted answer. Though the original asker seems to have vanished so isn't going to accept one.... – codetaku Aug 20 '14 at 15:17
  • Warning: the FTP command line client that comes with Windows doesn't support passive mode so using this technique may waste your time. It did in my case since I needed to upload files and was using the Windows command line w/ natively installed tooling. – sean2078 Sep 21 '17 at 2:29
  • It will transfer all the plain files in the current directory but it will not transfer recursively any directories that are present. It will just ignore them silently – bergercookie Feb 15 at 18:09
22

You can use ncftpput. Do the following:

  1. Install ncftp:

    yum install ncftp
    

yum is lowercase.

Alternatively:

    apt-get install ncftp

2. Execute the following command:

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

Use an FTP client such as LeechFTP or FileZilla or something similar. Many people swear by CuteFTP, but it's shareware last I checked. All support transferring a whole folder including directory structure.

5
  1. have the user/client zip the folder
  2. upload the zip file
  3. unzip the folder server side.
  • note: my answer was posted at StackOverflow. That's why it references a "coding" solution. – Chase Florell May 15 '11 at 1:20
2

A simple tutorial for other Windows newbies like me who wind up here:

The easiest way to upload an entire folder (with all subfolders and files in them) is:

  1. Download NcFTP Client (it's free, but you can donate) from this link.
  2. Choose NcFTP Client 3.2.5 for Microsoft Windows from the list.
  3. Install it.
  4. When done, a small CMD window with a cherries icon will pop-up. You don't need it.
  5. Just open a standard CMD window and type:
    ncftpput -u *yourUserNameHere* -p *yourUserPasswordHere* -R *www.yourWebsite.com* /
                     _C:\yourFolderDirectoryHere\\*_
    (as one line).

Note that:

  • -R is a flag for "recursive"; it makes the command copy all subfolders recursively
  • / (slash) is your website's root directory
  • C:\yourFolderDirectoryHere\* selects everything inside C:\yourFolderDirectoryHere
2

I'll offer an answer which - though it is pure brute force and not elegant in the slightest - was the only thing that worked for me on the command line. I created a list of the files, and put them into a script:

generate your list of files:

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

copy and paste them into the script:

#!/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
1

Check this out.

You can also programmatically create a folder on the server, and then upload all files to that new folder.

  • The linked SO question has been removed. – cxw Nov 13 '17 at 12:06
0

FileZilla is great for this. If you don't want to download/install anything, this can be done with Internet Explorer. Go into the advanced options, and select Enable FTP folder view (outside of Internet Explorer). Then you can point an explorer window at your FTP server and drag-and-drop files and folders between explorer windows.

0

Firefox has a plug-in called FireFtp that is a nice ftp client.

0

The target dir is a zip file. You can copy the full zip file into the ftp server using below code.

//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);
    }
}         
  • That's nice, but your program doesn't compile. – DavidPostill Jun 15 '16 at 17:32
0

My answer is variation of @dgig 's answer.

You can list all the files and save them (including put command) into a file:

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

and then use sftp to process the file:

sftp -C -b sftpbatchfile.txt name@server

-C is for compression, -b is for batch file

  • This does not use FTP as asked. The sftp program uses the SFTP protocol which is a different protocol although it has some letters in common. And you didn't edit the enter code here leftover. – dave_thompson_085 Mar 25 '17 at 16:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy