Simpler Navigation for Servers and Operating Systems
Completed: a much simpler Servers and Operating Systems section of the Community. We combined many of the older boards, so you won't have to click through so many levels to get at the information you need. Check the consolidated boards here as many sub-forums are now single boards.
Showing results for 
Search instead for 
Did you mean: 

Pass variable to the ftp script

Stephen Ng
Occasional Advisor

Pass variable to the ftp script

I have the following ftp script and I want the mget or get to copy a different no. of files each time.

#vi ftpscript
ftp $remote_sys <
S.K. Chan
Honored Contributor

Re: Pass variable to the ftp script

I modified your script to look like this (example) :-

{ echo user skchan mypassword; echo mget $1; echo quit ; } |ftp -i -n $2

You would then run it like so ..
# for file in $(cat d)
> do
> ./ftpscript $file
> done

The $1 takes in the filename one at a time from the for loop and $2 is the system hostname that you're ftping to. The downside is of course you got to run ftp each time you want to retrieve a file which I suppose is what you wanted because you don't want to use pattern matching to retrieve multiple files in a single session.

Jean-Luc Oudart
Honored Contributor

Re: Pass variable to the ftp script

why not generate a script on the fly :


echo 'ftp $remote_sys<> newscript
echo 'user $remote_user $remote_pass' >>newscript
cat listfile | while read filename
echo "get $filename" >>newscript
echo "bye" >>newscript
echo "EOP" >>newscript

newscript is the script to be executed and listfile is the file with the list of file to be trasnferred. This file is dynamic.

don't forget "chmod +x newscript"

PS : mind the single and double quote
fiat lux
Rory R Hammond
Trusted Contributor

Re: Pass variable to the ftp script

Below is script I use to get data. Using MGET can some time get to much stuff Trick I use, Is I first get a list of files on the system. parse the list and then get the "stuff" I need. Just a different way to look at the problem.
# Purpose: Retrieves files from a remote location
# VIA FTP. This file is usually called from
# a crontab entry.
# Written by: Rory Hammond
# I modifed this script by shortening it so that I can share the
# concepts The original had a little more error checking and then
# uploaded data into a database

# variables need to work
umask 0
GATEWAYPW="user proxyid proxpasswd"
REMOTEUPW="user userid passwd"
REMOTELOC="ftp.location.coml" #can also be IP Address

# Getlist lists ftp into site and list files available
# At this site I was only looking for TXT files hence the grep.
( echo ${GATEWAYPW}
echo "ascii"
echo "nlist"
echo "quit"
) | ftp -n ${REMOTELOC} |grep TXT

# This gets the files gotten from the getlist.

sleep 5
( echo ${GATEWAYPW} # do not need the first two lines if you don't have a
sleep 5 # a gateway user ID and password to get out
sleep 5
echo "binary"
echo "get $1 $1"
sleep 5
echo "quit"
) | ftp -n ${REMOTELOC}

# grep txt will get all file names ending with txt
# it would be faster to put this loop in the getfile
# script macro but I chose not to. After words
# you check the the line count of getlist and compare it
# with the number of files you did receive.
# As a variation you can change the script put files
# and use the getlist to enuser the the ftp worked.
for arg in `getlist`
cd ${PUTDIR}
getfile ${arg}
echo "`date` $0: --- getfile ---"
echo "$0:Getting ${arg} and putting it at" ${PUTDIR}/${arg}
echo "`date` $0: -----getfile----- transferring ${arg} copy to Mercator"
tranfile ${arg}

There are a 100 ways to do things and 97 of them are right