监听文件夹并在更改时修改传入文件

监听文件夹并在更改时修改传入文件

我想使用 shell 脚本(和 tshark)将 pcap 文件转换为 json 文件。一旦将一个或多个新的 pcap 文件复制到文件夹中,就应执行命令 tshark,并将生成的 json 数据存储在另一个文件中(以不同的顺序)。转换完成后,应立即删除 pacap 文件。

这个想法看起来像这样:

while(true){
   wait_for_IN_folder_changed
   tshark -T ek -x -r \in\in.pcap > \out\out.json
   rm \in\in.pcap
}

最好以多线程方式启动 tshark 进程,以提高并行性,从而提高吞吐量。但是不同的线程可能会互相妨碍吗?

答案1

您可能正在寻找:https://www.gnu.org/software/parallel/man.html#示例:-GNU-Parallel-as-dir-processor

示例:GNU Parallel 作为 dir 处理器

如果您有一个目录,用户可以在其中放置需要处理的文件,您可以在 GNU/Linux 上执行此操作(如果您知道在其他平台上调用 inotifywait 的内容,请提交错误报告):

inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f my_dir |\
  parallel -u echo

这将对放入 my_dir 或 my_dir 的子目录中的每个文件运行命令 echo。

您当然可以使用 -S 将作业分发到远程计算机:

inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f my_dir |\
  parallel -S ..  -u echo

如果要处理的文件位于 tar 文件中,则解压一个文件并立即处理它可能比首先解压所有文件更快。如上所述设置 dir 处理器并将其解压到 dir 中。

使用 GNU 并行作为 dir 处理器与使用 GNU 并行作为队列系统/批处理管理器具有相同的限制。

答案2

对于无限循环 + wait_for_IN_folder_changed因克朗德可能有帮助。

AFAIK,“并行进程”和“多线程”是非常不同的东西,考虑到您无法修改或重新编译给定的二进制文件,剩下的唯一选择是并行处理。有几种方法可以实现这一点:

  • 最基本的:tshark [options] &
  • 一些更高级的结构参数
  • 或专用工具,例如GNU 并行

注意:也许在使用“incrond”时甚至不需要这些(很长一段时间没有使用它......)

相关内容