使用shell脚本进行SFTP文件操作

时间:2013-10-23 02:27:34

标签: shell sftp

是否有人尝试使用shell脚本访问和操作SFTP服务器中的文件基本上,这是我必须做的: 1.打开SFTP,访问指定目录 2.遍历所有.txt文件 3.读取每个.txt文件的文件名,只获取包含/ s'XX'substring的文件      (即hello-XX.txt) 4.通过附加'-OK'字符串重命名该文件      (i.e.hello-XX-OK.txt)

感谢您的投入。

5 个答案:

答案 0 :(得分:0)

这是expect的用途。大致是:

#!/PATH/TO/expect -f
spawn sftp host
expect -re "Username:"
send -- "MYUSER\r"
expect -re "Password:"
send -- "PASSWORD\r"
expect -re "ftp>"
send -- "cd mydir\r"
expect -re "ftp>"
send -- "get myfile\r"
...

答案 1 :(得分:0)

您可以使用“here document”(<<EOF,如指定的here)编写SFTP脚本,但是您将无法使用类似shell脚本的原语(la bash) SFTP脚本。

如果您有SSH访问权限,也许可以尝试使用基于SSH的脚本。

答案 2 :(得分:0)

您的描述中没有任何内容要求您在sftp服务器上运行任何逻辑。您可以使用sftp命令获取数据并在本地进行处理,例如:

for file in $(echo 'ls -1' | sftp blah | tail -n +2); do
  # do stuff
done

答案 3 :(得分:0)

让我们使用Perl:

#!/usr/bin/perl
use Net::SFTP::Foreign;
$sftp = Net::SFTP::Foreign->new($host, user => $user, autodie => 1);
$sftp->setcwd($dir);
$sftp->mget("*XX*.txt", $local_dir);

答案 4 :(得分:0)

这是我为自己的目的而工作的起点。我正在使用sshpass以便可以指定密码,但是如果正确交换了RSA公钥,您应该能够删除那个额外的密码。

#!/bin/bash

function sftpexec()
{
    (SSHPASS="password" sshpass -e sftp user@server | tail -n +2) << !
$1
!
}

FILES=$(sftpexec ls)
echo $FILES

这样做会列出起始目录中服务器上的所有文件。