linux - 如何在从 scp 接收文件后运行脚本

标签 linux shell ssh

我想运行一个脚本来处理某个目录中通过 scp 协议(protocol)接收到的每个文件,在收到文件后立即处理。

我不想池化该目录,以避免尝试处理部分收到的文件。我想,这也是阻止我使用 inotify 工具( https://github.com/rvoicilas/inotify-tools/wiki )的问题,因为我无法知道文件是否在成功传输后关闭,或者是否过早关闭

最佳答案

这是可能的,这是一个非常好的技巧,但很难设置。

您必须在 scp 中使用未记录的选项:-f 和 -t(请参阅 scp.c)。

在接收 scp 命令的远程服务器上:

  1. 在/etc/password 中,您必须用 shell 脚本替换/bin/bash
  2. Shell 脚本必须获取从客户端接收的参数(请参阅特殊参数 $@)
  3. 在 shell 脚本中,选择要将要传输的文件发送到的目录
  4. 在shell脚本中执行scp代码中的scp -r -p -t/new/directory,-t初始化iamremote变量,该变量允许从当前连接传输。
  5. 在 shell 脚本中在此之后执行一些操作,或不执行
  6. 退出

要获取文件,请将 -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/

相关文章:

使用不同的用户名通过 SSH 进入 Vagrant Box

linux - 带有 rsa 文件的 Picloud scp 不工作

linux - 如何在 shell 脚本中获取命令的输出?

linux - 以编程方式在 Linux 上提升权限

linux - 如何在 bash 的 if 条件下验证时间?

c++ - 如何从C++将根euid传递给shell脚本

python - python 命令行应用程序的设计

c - 在 Linux 上用 C 跟踪键盘和鼠标事件

python - 如何在Python中执行这个unix进程?连接参数时出现问题

linux - 使用 Kate 从远程主机打开文件