是否有人尝试使用shell脚本访问和操作SFTP服务器中的文件基本上,这是我必须做的: 1.打开SFTP,访问指定目录 2.遍历所有.txt文件 3.读取每个.txt文件的文件名,只获取包含/ s'XX'substring的文件 (即hello-XX.txt) 4.通过附加'-OK'字符串重命名该文件 (i.e.hello-XX-OK.txt)
感谢您的投入。
答案 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
这样做会列出起始目录中服务器上的所有文件。