首页 > 解决方案 > 用于在远程 SFTP 服务器上移动文件的 Shell 脚本

问题描述

在本地下载文件后,我试图通过 shell 脚本将文件从一个目录移动到远程 SFTP 服务器上的另一个目录。我知道没有通配符移动文件功能,所以我唯一的选择似乎是单独重命名文件。

如果有更好的编写此代码的方法,有人可以帮助我编写下面的代码。

一旦文件下载到我的本地目录,我要做的就是将文件移动到 SFTP 服务器上的存档目录。

我知道还有其他方法可以使用 python/perl 脚本来实现,但我只能在 linux 机器上使用 Shell 脚本。

#!/usr/bin/ksh


#LOGGING
LOGFILE="/tmp/test.log"

#SFTP INFO
FTP_SERVER="test.rebex.net"
FTP_USER="demo"
FTP_PWD="password"
FTP_PORT=22
FTP_PICKUP_DIR="/"
LOCAL_DIR="/"


#-------DOWNLOAD FILES
expect <<END #> $LOGFILE
 send "$(date)\r";
 spawn sftp $FTP_USER@$FTP_SERVER 
 expect "*password: " 
 send "$FTP_PWD\r"; 
 expect "sftp> "
 send "mget *.ext\r"  
 expect "sftp>"
 send "exit\r"
END


#--------- MOVE FILES TO ARCHIVE ON SERVER
cd /home/ravi/Files

for fl in *.ext
do

expect <<END #> $LOGFILE
 send "$(date)\r";
 spawn sftp $FTP_USER@$FTP_SERVER 
 expect "*password: " 
 send "$FTP_PWD\r"; 
 expect "sftp> "
 send "rename $fl /ARCHIVE/$fl\r"  
 expect "sftp>"
 send "exit\r"
END

done 
#For Loop End

标签: linuxrenamesftpexpect

解决方案


你可以lftp使用mmv选项

mmv [-O directory] file(s) directory

  Move  specified  files  to a target directory. The target directory can be specified after -O
  option or as the last argument.

       -O <dir>   specifies the target directory where files should be placed

参考

示例用法

lftp -u $FTP_USER,$FTP_PWD sftp://$FTP_SERVER:22 <<EOF
   mmv dir/to/path /dir/to/renamed/path
   EOF

推荐阅读