Shell Script to Download Files From a Source Directory on a Remote FTP Server
In this article, we are going to write a shell script to download files from a certain directory in a server to a local computer using FTP. It is recommended to have some knowledge of FTP before going through this article, but it is not necessary.
Before writing a shell script, we will see how to download a file directly using commands, then we will extend it to a script.
The FTP commands for downloading files are “get” and “mget” which are used for downloading single or multiple files respectively. These commands should be entered inside an FTP prompt. Files are always downloaded from the “current directory” on the server. There is no way to specify which directory to download from, so we first have to change to the required source directory before downloading.
A list of commands useful for downloading files (Examples are shown in the problem below):
1. get filename #download file 2. mget file1 file2 #download multiple files 3. cd dirname #change remote directory 4. lcd dirname #change local directory 5. ftp hostname #login to ftp server 6. bye #terminate ftp connection and quit ftp
Consider the problem below to understand downloading files using FTP:
Download 2 files “f1.txt” and “program1.c” from the src directory inside the server to dst directory inside the local computer.
Stepwise Implementation for Downloading:
Step 1: First, login to ftp using “ftp hostname” command and enter login details.
Step 2: Change to src directory on server using “cd src” and also change to dst directory on local computer using “lcd dst”.
Step 3: Now type “mget file1.txt program1.c” to download the files. Then type “bye” to terminate FTP connection and exit FTP prompt.
A shell script to perform downloads in Stepwise:
Step 1: First, store FTP login details in variables inside the script. These values don’t change, so you don’t need to ask the user every time, and it makes logging into the server convenient.
HOST = "192.168.0.104" #Server's hostname USER = "lapowner" #Server login username PASSWORD = "1234asdf@Z" #Server login password
Step 2: Take the source directory and a list of files to download as input through arguments to the script.
SOURCE = $1 #$1 is the first argument to the script ALL_FILES="${@:2}" #${@:2} is the list of arguments without the first one
Step 3: Write FTP command with parameters -inv or -i -n -v.
The parameters are described below:
Parameter | Description |
---|---|
-i | Disable interactive mode in ftp. By using this, ftp will not ask for confirmation for every file being downloaded. |
-n | Helps to log in manually to ftp using “user $USERNAME $PASSWORD”. Without, this ftp would assume your local desktop’s username as the server’s username. |
-v | Verbose mode for ftp. This makes the output more detailed. |
Also, Supply FTP commands(like mget etc) to FTP through input redirection using “<<“. Use “EOF” to mark the beginning and end of the input to FTP.
ftp -inv $HOST <<EOF #Begin input to FTP user $USER $PASSWORD cd $SOURCE mget $ALL_FILES bye EOF #End input to FTP
Step 4: Run the script with the arguments i) the source directory and ii) a list of files:
./script.sh file1 #for downloading file1 ./script.sh *.c file1 #for downloading file1 and all c files
Complete Shell script to download files from a source directory on a remote FTP server:
#!/bin/bash HOST = "192.168.0.104" USER = "lapowner" PASSWORD = "1234asdf@Z" SOURCE = $1 ALL_FILES = "${@:2}" ftp -inv $HOST <<EOF user $USER $PASSWORD cd $SOURCE mget $ALL_FILES bye EOF
Output:
Contact Us