I need to download 10,000 zip files from a client's FTP that has about 40,000 items on it. I have contemplated doing:

```
$ cat > files.txt
file1
file2
file3
file4

```

with 

```
$ wget -i files.txt

```

Is there a better solution for such a large amount in case I get timed out?
['https://superuser.com/questions/583558', 'https://superuser.com', 'https://superuser.com/users/187031/']
The solution is good and quite solid: with the proper options, `wget` will retry and download any file whose transfer got interrupted.

You can also script most command-line FTP clients, however (e.g. BSD ftp client). But `wget` is better in that you can configure it to not download files you already have, which makes it very convenient for syncs.

`wget` supports (on Linux at least) also rate limiting, and it is quite easy to distribute the file list between several files in order to download in parallel, or you can use [GNU parallel](http://savannah.gnu.org/projects/parallel).
`wget` is good and competent and will probably work fine in this case as mentioned by Iserni's answer, if you dig into the manual for available options. I'll just state some alternatives.

I use [LFTP](http://lftp.yar.ru/) for transfers and syncing over both FTP and SFTP. It has an internal queuing system that works well for my use case, supports mirroring, reverse mirroring, FXP, all regular FTP functions and more (even Bittorrent nowadays).

In this case it seems simple enough to just use a script and `wget`, but I wanted to mention a program that simplified FTP transfers for me greatly.

I've also used [NcFTP](http://www.ncftp.com/ncftp/) that has a very nice batch system, but the deal breaker in LFTP's favor for me was that it supported both FTP and SFTP.

Another alternative is [`rsync`](http://rsync.samba.org/) which also supports FTP, and perhaps you are already used to this. It also has quite advanced options ready as per filtering and resuming broken downloads.

An advantage with a "real" FTP client as compared to batch `wget` use is that a single connection to the server can be reused, which might boost performance. I'm not sure there is such an alternative for `wget`, but maybe there is. If this is a true one-off operation, you could probably use more or less anything.