1

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

感谢您的投入。

4

5 回答 5

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);
于 2013-10-23T08:29:59.920 回答
0

这就是期望的。大致:

#!/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"
...
于 2013-10-23T02:29:58.507 回答
0

您可以使用“此处的文档”(<<EOF在此处指定)为 SFTP 编写脚本,但您将无法在 SFTP 脚本中使用类似 shell 脚本的原语(la bash)。

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

于 2013-10-23T02:31:34.797 回答
0

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

for file in $(echo 'ls -1' | sftp blah | tail -n +2); do
  # do stuff
done
于 2013-10-23T02:33:24.393 回答
0

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

#!/bin/bash

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

FILES=$(sftpexec ls)
echo $FILES

这将做的是在起始目录中列出服务器上的所有文件。

于 2014-02-26T01:50:32.630 回答