我想运行一个脚本来处理某个目录中通过 scp 协议(protocol)接收到的每个文件,在收到文件后立即处理。
我不想池化该目录,以避免尝试处理部分收到的文件。我想,这也是阻止我使用 inotify 工具( https://github.com/rvoicilas/inotify-tools/wiki )的问题,因为我无法知道文件是否在成功传输后关闭,或者是否过早关闭
最佳答案
这是可能的,这是一个非常好的技巧,但很难设置。
您必须在 scp 中使用未记录的选项:-f 和 -t(请参阅 scp.c)。
在接收 scp 命令的远程服务器上:
- 在/etc/password 中,您必须用 shell 脚本替换/bin/bash
- Shell 脚本必须获取从客户端接收的参数(请参阅特殊参数 $@)
- 在 shell 脚本中,选择要将要传输的文件发送到的目录
- 在shell脚本中执行scp代码中的scp -r -p -t/new/directory,-t初始化iamremote变量,该变量允许从当前连接传输。
- 在 shell 脚本中在此之后执行一些操作,或不执行
- 退出
要获取文件,请将 -t 替换为 -f
我目前正在研究这样一个 shell 脚本,多年来它运行良好。
有关这些选项的更多信息: https://lists.gt.net/openssh/dev/41493?do=post_view_threaded https://blogs.oracle.com/janp/entry/how_the_scp_protocol_works
关于linux - 如何在从 scp 接收文件后运行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31115372/