Bash, Tutorials

I have a folder of csv files that need uploading to a server I don’t want to do it manually, Bash can handle this task perfectly.

This script will connect to an FTP server then loop through the csv files or any type specified and upload them. You cannot do a loop whilst inside of heredoc block like most examples do, instead the commands are written to a txt file.

First set of variables are the ftp connection details and the type of file to look for, only needed when looking for certain types of files in this case .csv files.

Each command ends in » ftp.txt this write to the file called ftp.txt if the file does not exist it’s created.

Once connected do a cd (change directory) do go to the specified directory.

To loop through the files a ‘for filename in‘ is used pass in the type variable the * is a wildcard to select all matching.

to execute the code stored inside the txt file use ftp < ftp.txt use the -in flag to stop the prompt for a password.

Lastly delete the ftp.txt file.

#!/bin/bash
HOST='ftp.domain.co.uk'
USER='username'
PASSWD='password'
TYPE='.csv'

echo open $HOST >> ftp.txt
echo ascii >> ftp.txt
echo user $USER $PASSWD >> ftp.txt
echo cd /public_html/temp/ >> ftp.txt

for filename in *$TYPE; do
    echo "put $filename"
done >> ftp.txt

echo bye >> ftp.txt
ftp -in < ftp.txt
rm ftp.txt

Save this script as upload.sh to run this:

sh upload.sh