This is part of a SFTP file transfer.

Here are the steps:

  1. Check files with .csv extension and get them to the local directory.
  2. After that, move them to the another folder in the remote connection.

Tried using the rename command but it throws an error "Failure"

Tried using -b batch-file option with sftp but looks like rename command needs a specific file-name instead of a set of files.

So how do I achieve this ?

  • Do you have permissions to remove the file? Do you have permissions to put the file in the remote new folder? – YoMismo Aug 12 '15 at 15:12
  • yes I do. I was not giving the destination filename and thats the reason it was failing – shravani Aug 13 '15 at 15:00

Works for me, so you will need to provide more information about the problem:

chris@localhost$ finger 2> file.txt
chris@localhost$ sftp remotehost
Connected to remotehost.
sftp> ls -l file.txt
Can't ls: "/home/chris/file.txt" not found
sftp> ls -l file.tmp
Can't ls: "/home/chris/file.tmp" not found

# So the file doesn't exist on the remote in either form

sftp> put file.txt file.tmp
Uploading file.txt to /home/chris/file.tmp
file.txt                                                      100%  501     0.5KB/s   00:01
sftp> ls -l file.txt
Can't ls: "/home/chris/file.txt" not found
sftp> ls -l file.tmp
-rw-r-xr--    0 1001     1001          501 Aug 12 16:35 file.tmp

# It has arrived as file.tmp

sftp> rename file.tmp file.txt
sftp> ls -l file.txt
-rw-r-xr--    0 1001     1001          501 Aug 12 16:35 file.txt
sftp> ls -l file.tmp
Can't ls: "/home/chris/file.tmp" not found

# And been successfully renamed
  • Thanks , But when i try to pass as arguments, it doesnt read the filename from a while loop. – shravani Aug 12 '15 at 17:11
  • When i use this rename "$Remote_server_source_path/$filename" "$Dest_path/$filename" – shravani Aug 12 '15 at 17:11
  • Sorry, i posted the comment before it was complete. Here is the code i wrote – shravani Aug 12 '15 at 17:12
  • cat tempfilelist | while read line do #echo $line echo "Filename to be moved : " filename= echo $line | awk '{print $9}' echo $filename sftp $LOGIN << EOF cd $Remote_server_source_path pwd rename "$Remote_server_source_path/$filename" "$Dest_path/$filename" bye EOF done – shravani Aug 12 '15 at 17:12
  • @shravani please update your question to include this new information. Otherwise it can get too spread out and lost in the comments. – roaima Aug 13 '15 at 13:31

Apparently the rename command in sftp does NOT work when the source and target are on different file systems.

I see this behaviour in RedHat6, SLES9, and more.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.