我想使用 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 并行作为队列系统/批处理管理器具有相同的限制。