安全复制 (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
我需要在 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