有没有人尝试过使用shell脚本基本上在SFTP服务器访问和操作文件,这是我必须做的:1.打开SFTP,通过所有.txt文件访问指定的目录2.循环3.每个.txt文件的读取文件名和只获取文件/ s的包含/ S 'XX' 的子串(即喂-XX.txt)4.通过追加一个 '-OK' 字符串重命名文件(iehello-XX-OK.txt)
感谢您的投入。
有没有人尝试过使用shell脚本基本上在SFTP服务器访问和操作文件,这是我必须做的:1.打开SFTP,通过所有.txt文件访问指定的目录2.循环3.每个.txt文件的读取文件名和只获取文件/ s的包含/ S 'XX' 的子串(即喂-XX.txt)4.通过追加一个 '-OK' 字符串重命名文件(iehello-XX-OK.txt)
感谢您的投入。
您可以编写脚本SFTP带有“这里文件”( <<EOF
,按规定这里 ),但你不能在SFTP脚本中使用shell脚本类原语(一拉的bash)。
也许尝试基于SSH协议的脚本,而不是,如果你有SSH访问。
在你的描述没有什么需要你SFTP服务器上运行的任何逻辑。 您可以使用SFTP命令刚刚得到的数据,并在本地做代加工,如:
for file in $(echo 'ls -1' | sftp blah | tail -n +2); do
# do stuff
done
这就是期待是。 大致:
#!/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"
...
让我们用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);
下面是我的工作得到了我自己的目的出发点。 我使用sshpass
使得密码可以指定,但你应该可以,如果你有正确交换的RSA公钥除去额外的感伤。
#!/bin/bash
function sftpexec()
{
(SSHPASS="password" sshpass -e sftp user@server | tail -n +2) << !
$1
!
}
FILES=$(sftpexec ls)
echo $FILES
这是什么会做的是列出所有在启动目录的服务器上的文件。