我需要创建一个crontab脚本(自动定期执行),该脚本应该找到文件夹的最新更改文件,然后使用sftp连接将其传输到另一台机器。 通过提取所需文件的名称来解决问题的第一部分:
cd $myFolder
output=$(find . -type f -printf "%C@ %p\n" | sort -rn | head -n 1)
filename=$(echo $output | cut -d'/' -f 2)
但第二部分很难,因为我无法找到在Linux sftp连接中键入$filename
变量值的方法,也无法以非交互方式键入用户/密码。将其保存到临时文件中可能是一个很好的解决方案。
还有更好的选择吗?
由于
答案 0 :(得分:3)
您可以使用inotify来监控
修改上的目录和触发器。文件名可以输入rsync
或
scp
。例如:
inotifywait \
--quiet \
--event modify \
--format '%f' \
--monitor watch_directory |
while read FILE; do \
scp watch_directory/$FILE host:/destination;
done
答案 1 :(得分:2)
您可以使用scp
代替sftp
- 它使用相同的协议,但更适合非交互式使用。
如果目录中只包含文件(没有子目录),您可以在只有ls
的目录中找到最后修改的文件:
output=$(ls -t "$myFolder" | head -1)
答案 2 :(得分:2)
您可以使用curl通过sftp将文件上传到远程服务器,并在命令中传递登录信用(用户名和密码),如下所示:
curl -T uploadfilename -u username:password sftp://sitename.com/myfile
答案 3 :(得分: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 login without password