3

我需要制作一个 crontab 脚本(自动并定期执行),它应该找到文件夹的最新更改文件,然后使用 sftp 连接将其传输到另一台机器。通过提取所需文件的名称来解决问题的第一部分:

cd $myFolder
output=$(find . -type f -printf "%C@ %p\n" | sort -rn | head -n 1)
filename=$(echo $output | cut -d'/' -f 2)

但第二部分很困难,因为我找不到$filename在 Linux sftp 连接中输入变量值的方法,也找不到以非交互方式输入用户/密码的方法。将其保存到临时文件中可能是一个很好的解决方案。

有没有更好的选择?

谢谢

4

4 回答 4

3

您可以使用inotify来监视目录并在modify上触发。文件名可以输入到rsyncscp。例子:

inotifywait      \
  --quiet        \
  --event modify \
  --format '%f'  \
  --monitor watch_directory |
  while read FILE; do \
  scp watch_directory/$FILE host:/destination;
  done
于 2013-07-26T12:59:02.303 回答
2

您可以使用 curl 通过 sftp 将文件上传到远程服务器,并在命令中传递登录凭据(用户名和密码),如下所示:

curl -T uploadfilename -u username:password sftp://sitename.com/myfile
于 2013-07-28T10:51:58.007 回答
2

您可以使用scp而不是sftp- 它使用相同的协议,但更适合非交互式使用。

ls如果该目录仅包含文件(没有子目录),您可以在只有 的目录中找到最后修改的文件:

output=$(ls -t "$myFolder" | head -1)
于 2013-07-26T12:51:18.837 回答
0

我的解决方案:

获取文件名:

filename=$(ls -t . | head -1)

要将数据传输到远程服务器:

#!/usr/bin/expect -f

# A copy of the $sourceFile is sent to the $targetPath by using the scp command (secure copy)

set timeout 20

set sourceFile [lindex $argv 0]
set targetPath [lindex $argv 1]
set user [lindex $argv 2]
set password [lindex $argv 3]

# connect via scp
spawn scp $sourceFile "$user@$targetPath"
#######################
expect {
  -re ".*es.*o.*" {
    exp_send "yes\r"
    exp_continue
  }
  -re ".*sword.*" {
    exp_send "$password\r"
  }
}
interact

用户身份验证委托给使用此脚本的脚本,可以通过在远程服务器中生成公钥/私钥 rsa 密钥对,然后使用它:阅读下一个链接:无密码的 SSH 登录

于 2013-07-29T10:25:34.893 回答