Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I have a build script that uses the standard windows Ftp.exe to transfer big files accross the globe each night. It takes ages!

Filezilla is much much faster, but it doesn't appear to be very scriptable.

Any suggestions?

share|improve this question

closed as not constructive by John Gardeniers, Michael Hampton, Scott Pack, mdpc, Ward Feb 3 '13 at 6:30

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

13 Answers 13

up vote 1 down vote accepted

You can use NcFtp it can run in windows. It implements a NcFtpPut and NcFtpGet that work great with scripts.

share|improve this answer

Would installing cygwin at your end be an option? Then you should be able to use bash and a (scriptable) unix FTP client from your Windows box.

share|improve this answer
    
Cygwin makes administrating windows systems more tolerable. –  Joe Jul 31 '09 at 19:08
    
I guess that's at least an option, but my build scripts are convoluted enough as it is! :) I'm still holding out for a windows ftp client which is controllable from the command line. There got to be at least one! –  Greg Malcolm Jul 31 '09 at 19:49

Any chance you can use scp instead of ftp? I've used the pscp utiltly in PuTTY and found it to be pretty scriptable. Putty also includes a sftp client, fwiw.

share|improve this answer
    
Yeah, I prefer to use scp/sftp too. But as mentioned, I don't get to chose the transport method here... –  Greg Malcolm Jul 31 '09 at 19:51

If full-blown Cygwin isn't an option, you might try the Windows version of cURL.

share|improve this answer
    
Or try WGET - should work fine also... –  Christopher_G_Lewis Jul 31 '09 at 21:04

You may also want to try Script2Cloud from K2SXS.

It supports four object-oriented scripting languages (C++, JavaScript, Pascal, Basic) and supports a variety of file transfer protocols including FTP(S), SFTP, WebDAV, and some cloud protocols like Azure and S3 in development.

Here's the web page: http://www.k2sxs.com/script2cloud/

share|improve this answer

at the risk of sounding like a linux zealot, can you switch to rsync? or if you're windows inclined robocopy?

share|improve this answer
    
Not an option. I don't have much control over the protocol (it's going to somebody elses server). Also its FTPing from a Windows machine so rsync is not convenient. –  Greg Malcolm Jul 31 '09 at 18:56

I have no experience with it, but ScriptFTP might do the job.

share|improve this answer

you could use powershell:

$File = "C:\foofile.zip"

    $ftp = "ftp://username:password@mydomain.com.com/upload/incoming/newfile.zip"

    "ftp url: $ftp"

    $webclient = New-Object System.Net.WebClient
    $uri = New-Object System.Uri($ftp)

    "Uploading $File..."

    $webclient.UploadFile($uri, $File)
share|improve this answer

CoreFTP has a scripting module. We've used it to some success. Not great, but plenty OK. I second the cygwin idea. I run cygwin on all my servers (in large part due to my personal dependence on tail).

http://support.microsoft.com/kb/96269 has some notes on scripting FTP in windows.

Wget built for Windows (skpping cygwin.dll) http://pages.interlog.com/~tcharron/wgetwin.html

share|improve this answer

Ditch FTP and use Rsync (DeltaCopy) which copies only the changed files. If DeltaCopy doesn't do what you need -- Cygwin + Rsync + Bash will.

I have also used ActiveState Perl and an FTP library for Perl before to do more complex FTP operations.

share|improve this answer

The basic FTP.exe is quite stable and the first question to ask is,
Why do you get bad performance from that FTP?

You are comparing it with FileZilla performance.
I can think of only two things that could be done to overtake basic FTP performance for large file transfer.

  1. It might be doing a multi-part download to have multiple connections download a file
    • this would help if the server is limiting rate per connection
  2. It might be tweaking the TCP Window/buffer size to get a deeper TCP pipe
    • this will help if there is significant round-trip latency to the server

I have not been able to locate a command-line (script-able) client that can be told to perform multi-part downloads. Maybe, if others answering here agree to these ideas, they might be able to suggest a suitable reference.

I have always found NcFTP to be good for most purposes, and was expecting this support to be available there. The so-bufsize control on NcFTP might help with point-2 above.


There is one ActiveState Python script I found in the process,
But, have no idea how to get it usable for your purpose.
reference: threaded multipart FTP download via REST

Odd part is, the discussion on this script says FileZilla was not giving sufficient performance!

We needed to speed up downloading from a client's FTP site. For some reason, we could only get around 21 KB/s when downloading normally (FileZilla). Using this, I was able to get 100 KB/s with 5 connections and 200 KB/s if I was able to open 10 connections.

Currently, this could only download one file at a time. Haven't yet given much thought to downloading multiple file as this, as it is, meets our present requirements.

share|improve this answer

WinSCP does both sFTP and FTP.

Scripting is easy & well documented

share|improve this answer

You might want to try wput.

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.