You can use ncftpget command to download entire ftp directory and sub directories from remote ftp server. Let us say you would like to download /www-data directory and all subdirectories inside this one from ftp.nixcraft.net server. You need to use ncftpget command.
Install ncftp client
ncftp client software can be downloaded from http://www.ncftp.com/ncftp/ and works with FreeBSD, Solaris and all most all UNIX variant. You can also run command as follows to install ncftp:
$ sudo apt-get install ncftp
FTP get directory recursively
ncftpget is Internet file transfer program for scripts and advance usage. You need to use command as follows:
$ ncftpget –R –v –u "ftpuser" ftp.nixcraft.net /home/vivek/backup /www-data
Where,
- -R : Copy all subdirectories and files (recursive)
- -v : Verbose i.e. display download activity and progess
- -u "USERNAME" : FTP server username, if skipped ncftpget will try anonymous username
- ftp.nixcraft.net : Ftp server name
- /home/vivek/backup : Download everything to this directory
- /www-data : Remote ftp directory you wish to copy
If you get an error which read as follows:
tar: End of archive volume 1 reached tar: Sorry, unable to determine archive format. Could not read directory listing data: Connection reset by peer
Then add –T option to ncftpget command:
$ ncftpget –T –R –v –u "ftpuser" ftp.nixcraft.net /home/vivek/backup /www-data
Where,
- -T : Do not try to use TAR mode with Recursive mode
Featured Articles:
- 20 Linux System Monitoring Tools Every SysAdmin Should Know
- 20 Linux Server Hardening Security Tips
- Linux: 20 Iptables Examples For New SysAdmins

- My 10 UNIX Command Line Mistakes
- 25 PHP Security Best Practices For Sys Admins
- The Novice Guide To Buying A Linux Laptop
- Top 5 Email Client For Linux, Mac OS X, and Windows Users
- Top 20 OpenSSH Server Best Security Practices
- Top 10 Open Source Web-Based Project Management Software
Facebook it - Tweet it - Print it -
We're here to help you make the most of sysadmin work. So, subscribe!


{ 15 comments… read them below or add one }
This is GREAT! I have been struggling with transferring files from multiple partitions on one machine to multiple partitions on another, so NFS doesn’t get it done no matter which isthe server of client. I am now using ProFTPd as a server, and ncftp as a client, and I am watching the partitions fill up as I expected, rather than as NFS and cp -vurf were getting it done.
Thank you for posting this fantastic guide!
Great. I’ve been trying to make a full copy of my ftp site for a backup.
Thanks! needed to backup my site, and didn’t want to spend too much time writing a script…
very nice guide.
I install ncftp client in CentOS and its work.
Very useful guide !
I´m using it for my FTP-Server
Hi Vivek,
Very nice and encourageing blog you have, it’s inspire to all of us, realy it works in all manner, I hope you could be feeling the same
Cheers
Go opensource……
Ravi Bhure
This is great…except where the directory on the ftp happens to have a [ or ] character in it. A file in a directory your getting can have those characters, just not the directory you specify in the command :(
ncftpget will return the error “remote directory listing failed.”
Really unfortunate, this was *almost* the perfect solution for me.
Seems like it dosn’t download all files, I just did this on one of my sites (-T command) and there where 3 directories that wasn’t downloaded.. had to download them one by one.. is there a limit to how many files/directories it will get?
Hey – I was initially having trouble. Running the command as written, it would download any files in the remote directory, but not the subdirectories.
I had to add an asterisk to the line, so it looked like this (I ran it from the directory into which I wanted the files & directories to go):
$ ncftpget -R -v -u “username” http://ftp.remote_server.com ./ /Remote_Directory/*
Not sure why, but it did the trick.
-dave.
Actually, I am also missing a few, but not all of the sub directories…
At this point, I’m now doing this by hand. Any ideas as to why this doesn’t work would be welcome.
-dave.
A method that has worked much better for me is:
wget -r ftp://username:password@ftp.server.com/*
Much better, quicker and easier method Brad, cheers!
hehe wget rules again.
So clean and cool solution, thanks a lot :)
-q for quiet mode.
Worked great. Except for it not doing recursion deep enough.
Currently trying
wget -m ftp://username:password@ftp.server.com/*
as it supposedly sets the correct options.
Thank You Solved my problem