安全复制 (scp) 到达给定文件夹的最新文件?

Secure Copy (scp) the latest file which arrives at a given folder?

我需要在 bash/python 中编写一个脚本到 scp 到达给定 folder.That 的最新文件是我不断将文件放入文件夹说 (/home/ram/Khopo/) 我需要将其 scp 到 /home/xxx/khopo/.

中的 xxx@192.168.21.xxx

我用谷歌搜索得到了这个结果

file_to_copy=`ssh username@hostname 'ls -1r | head -1'`
echo copying $file_to_copy ...
scp username@hostname:$file_to_copy /local/path

但我想知道是否可以这样做,以便它仅在新文件夹到达源时运行(/home/ram/Khopo/)并等待文件到达文件夹并立即执行已经到了

我会尝试同步远程目录。这应该会给您带来不错的前景,如何做到这一点:

rsync:

https://askubuntu.com/a/105860

https://www.atlantic.net/hipaa-compliant-cloud-storage/how-to-use-rsync-copy-sync-files-servers/

或其他同步工具: https://en.wikipedia.org/wiki/Comparison_of_file_synchronization_software

正如其他人所建议的那样,您可以使用 inotifywait,下面是您可以在 bash 中执行的操作的示例:

#!/bin/bash
echo "Enter ssh password"
IFS= read -rs password  # Read the password in a hidden way

inotifywait -m -e create "/folder_where_files_arrive" | while read line
do
    file_to_copy=$(echo $line | cut -d" " -f1,3 --output-delimiter="")
    echo copying $file_to_copy ...
    if [[ -d $file_to_copy ]]; then  # is a directory
       sshpass -p $password scp -r username@hostname:$file_to_copy /local/path
    elif [[ -f $file_to_copy ]]; then  # is a file 
       sshpass -p $password scp  username@hostname:$file_to_copy /local/path
    fi
done

那么您最好将此脚本放在后台 运行,例如:

nohup script.sh &

对于 sshpass,您可以将其安装在 ubunut/debian 中:

apt install sshpass