I want to move all files in local directory to remote directory.
And I am using this code to achieve it
SOURCE_FILE=/var/www/oneserver/*
TARGET_DIR=/var/www/anotherServer
ARCHIEVEFILE=/var/www/archieveServer
/usr/bin/expect<<EOD
spawn /usr/bin/sftp -o Port=$PORT $USER@$HOST
expect "password:"
send "$PASSWORD\r"
expect "sftp>"
send "put $SOURCE_FILE $TARGET_DIR\r"
expect "sftp>"
send "bye\r"
EOD
It works fine, but sometime it stops and only send some files.
I also want to move the already sent file to ARCHIEVEFILE by using mv command. But dont get idea how to move it. I can't use scp
because the remote server not allowed using basic port, and the only way is using sftp.
Can anybody help, please?
[EDIT]
the $ARCHIEVEFILE
is still the local server, just to backup/move so those files are not sent anymore with next cronjob
the TARGET_DIR
is the remote server.
Best Answer
There's no command in OpenSSH
sftp
to move files to remote directory.What you can do is to:
sftp
put
to upload the files (as you are doing already), and thenuse shell
rm
command to delete the files aftersftp
is done (i.e. afterEOD
):Or use
!
to escape to shell fromsftp
script, after you sentput
:Of course, this is not an atomic solution. If a file is added between
put
andrm
, it will be lost. For an atomic solution, you have to iterate files in a local directory and upload and delete them one by one. Also for a robust solution, you need to check if an upload was successful.