check for file existence on remote machine using sftp

Hi all,
I am a beginner to shell script.Can any one please help me on the below requirement

I need to check whether the file (called 3Com_Files_Delivered.txt) exists on the remote mechaine or not? if so i need to copy all the files from there to my local mechaine.Especially i am struggling to get how to check whethere a particular file exists or not on remote mechaine.Please help me on this.

Advanced thanks
Narasimharao.

You could try to ftp 3Com_Files_Delivered.txt to your local host. From the subsequent presence of a copy of that file on your system you can conclude that transfer was successful. If not, then repeat after 5 minutes. If it was successful, then that is the green light to immediately start the transfer of the actual data file and delete the transferred copy of the indicator file. Perhaps there are more sophisticated methods, bit this is simple and the commands for both ftp transfers are almost identical.

Please read manual of rsh. It should be able to help youexecuting a script on the remote machine.

if [ -e filename]; then
echo "file exists"
else
echo "file not exists"
fi

cheers,
Devaraj Takhellambam

Try this,

#!/bin/sh

hostname=abc@server

if [ -n `ssh $hostname 'ls /home/user/file 2>/dev/null'` ]; then
        echo file exists
else
        echo "file doesn't exist"
fi

i tried all the above mentioned options.but i am not able to chk the file existence.

here i should use only sftp since my client is using sftp.

please see my code and guide me how to add the file check condition to that existing code

. /opt/etl/bin/.etl_profile.ksh
# echo "the variable is:" $3COM_SFTP_ACTN

Tcomdta=/var/opt/etl/datsrc/3com/data
Tcomtmp=/var/opt/etl/datsrc/3com/temp
Tcomlog=/var/opt/etl/datsrc/3com/log
logdate=`date +%Y%m%d%H%M%S`;
logfilenm=$Tcomlog/"3com_FTP_$logdate.log"
FILE="3Com_*"
maillist=`eval echo $TCOM_MAIL_LIST`

#----Log Errors in Log File---------#

err() {
 echo "ERROR: $@"  >> $logfilenm
        exit 1
}

#-----Move input file(s) from SFTP Server to 3com folder-------#

cd $Tcomtmp


echo Log BEGIN For $logdate>$logfilenm
>$Tcomtmp/file.dat


sftp -b - $TCOM_SFTP_ACTN << EOF >$logfilenm
mget /$FILE
quit
EOF

up to this part is working fine.But i was not able to add the file chek part to this.

Any one please help me on this.This is urgent.

appreciate all your help

thanksinadvance
narasimha

---------- Post updated at 04:12 AM ---------- Previous update was at 03:35 AM ----------

plz any one reply me on the above.

thanks
narasimha

That ssh check above should work fine, sftp and ssh use same tunnell, see man page:

sftp is an interactive file transfer program, similar to ftp(1), which performs all operations over an encrypted ssh(1) transport.

hi All,
Thanks for all your thoughts on this.Finally i am able to code a program which ftp's the files from remote machine to my local machine.But a part from this i need to add a process here i am giving full details .please guide me on this.

i need to add a process to the below existing script which has to poll every 5 minutes until 12 P.M from 5 A.M .How can i add this to the below script.Please advice me.

every my script will be triggerd at 5 A.M through scheduler.

comdta=/var/opt/etl/datsrc/3com/data
cominp=/var/opt/etl/datsrc/3com/input
comtmp=/var/opt/etl/datsrc/3com/temp
comlog=/var/opt/etl/datsrc/3com/log
logdate=`date +%Y%m%d%H%M%S`;
lognm="3com_FTP_$logdate.log"
trgr_file="3Com_Files_Delivered.txt"
infile="3Com_*"
maillist=`eval echo $TCOM_MAIL_LIST`
flag="N"


####################################################################
#
#REMOVING LOG FILES OLDER THAN 30 DAYS
#
####################################################################

find $comlog -type f -name '3com_FTP_*.log' -follow -mtime +30 -exec rm {} \; -print


#----Log Errors in Log File---------#

inf_log()
{
	echo "INFO: $@"  >> $comlog/$lognm
}

err()
{
	echo "ERROR: $@"  >> $comlog/$lognm
	exit 1
}


#######################################################################
#
# FTP PROCESS To check the existence of the trigger file every 5 min
# and if exist move all the input files from SFTP Server to 3com folder
#
#######################################################################


cd $cominp


echo Log BEGIN For $logdate>$comlog/$lognm


while [ "$flag" != "Y" ]
do
sftp -b - $TCOM_SFTP_FILES <<EOF >$comlog/$lognm
get /$trgr_file
bye
EOF

if [[ -f $trgr_file ]]; then
inf_log "Trigger File Exist on SFTP Server........."
inf_log "Copying 3Com Files Started.........."
sftp -b - $TCOM_SFTP_FILES <<EOF >$comlog/$lognm
mget /$infile
bye
EOF
flag='Y'
else
sleep 300
fi
done

#--------Now copying Plan,Pipeline,Forecast file(s) from input to data directory-------#

cp 3Com_Plan* $comdta
cp 3Com_Pipeline* $comdta
cp 3Com_Forecast* $comdta


#-------Mail SFTP status----------------------------#

grep -q 'Fetching' $comlog/$lognm

if [ $? -eq 0 ]; then
	inf_log "SFTP File Transfer Success!!!"
else
	echo "SFTP File Trasnsfer Failed\n"|mailx -s "3COM File Transfer Failed -ERROR" $maillist
	err " SFTP file transfer Failed - File is not Found!!!"
	exit 1
fi



#-------Remove input file(s) from SFTP Server-------#

sftp -b - $TCOM_SFTP_FILES <<EOF >>$comlog/$lognm
cd /
rm $infile
quit
EOF



#-------Notifying SFTP File(s) Removal Status-------#

grep -q 'not found' $comlog/$lognm
if [ $? -eq 0 ]; then
	err " Removal of 3Com File(s) from SFTP Box Failed!!!"
else
	inf_log " Removal of 3Com File(s) from SFTP Box is Success!!!"
	exit 0
fi

THANKS
narasimharao

Can we give URL in place of absolute path of the remote file?