Hi,

I have a script which uploads files successfully to another server via ftp. But after the files are uploaded, I want them to be deleted (removed), but it doesn't seem to work. I would appreciate if someone could help me out with this. How can I modify my script so that the uploaded files will be deleted after the ftp session?

Here's the script:

#!/bin/sh
cd /opt.../logs

Server="xx.xx.xx.xx"
Username="sonya"
Password="s2525"

DstDir="/files/son"

ftp -n $Server <<End-of-Session
user $Username $Password
binary
cd $DstDir
prompt
mput "go*"
bye
rm go*
End-of-session
exit 0


Thanks a lot,
Sonya

change

mput "go*"
bye
rm go*
End-of-session
exit 0

to

mput "go*"
bye
End-of-session
rm go*
exit 0

Because the rm go* is being fed to the ftp command (everything up to "End-of-session" is being fed to the ftp command), but the ftp session ended at "bye", and if it hadn't you would have removed the files on the remote machine (if anywhere). That's why you move that command down after the "End-of-session" line.

Hi,
Thanks a lot. I did as you said, and I also put the complete path, so instead of rm go* I used rm /..../go* and it worked!

Thanks again.
Sonya

Hi,

I made a mistake by including the rm before the ftp session just to check if my file can be deleted, so i thought your solution works. But when i tried your solution, i still wasn't able to delete the file. I included the path as well, still couldn't delete. Sorry for the mistake... but i really can't figure out why it won't be deleted..??


Thanks,

Sonya

I just noticed something, you use

ftp -n $Server <<End-of-Session
......
End-of-session

Those two tags don't match. That "End-of-(S/s)ession tag needs to be written exactly the same in both places.

Just a quick thought: If you use a path, also, it's best to make it absolute (/opt/whatever/go) rather than relative (../go) otherwise changes in your script could change where you try to delete the files from; assuming it's a constant.

, Mike

This article has been dead for over six months. Start a new discussion instead.