列出具有相应“就绪”文件的文件

问题描述 投票:1回答:1

我有一个服务“A”,它生成一些压缩文件,包括它在请求中接收的数据。并行地存在另一个服务“B”,其使用这些压缩文件。

诀窍是“B”不应该使用任何文件,除非它们完全写入。该服务通过查找由服务“A”创建的“.ready”文件来推断该信息,该文件的名称与所提及的扩展名一起生成的文件完全相同;一旦压缩完成。服务“B”使用Apache Camel进行此过滤。

现在,我正在编写一个需要相同压缩文件的shell脚本,这需要在shell中实现相同的过滤。我需要帮助编写这个脚本。我知道find命令但是一个天真的shell用户,因此知识非常有限。

例:

压缩文件:sumit_20171118_1.gz

对应的准备文件:sumit_20171118_1.gz.ready

另一个压缩文件:sumit_20171118_2.gz

这个没有现成的文件。

在上面列出的文件中,只有第一个应该被选中,因为它有一个相应的就绪文件。

linux shell
1个回答
0
投票

最明显的方法是使用繁忙的循环。但如果你使用GNU / Linux,你可以做得更好(来自:https://www.gnu.org/software/parallel/man.html#EXAMPLE:-GNU-Parallel-as-dir-processor

inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f my_dir |
  parallel -uj1 echo Do stuff to file {}

这样您甚至不必等待.ready文件:只有在写入文件完成且文件关闭时才会运行该命令。

但是,如果.ready文件只写得很晚,那么你可以搜索那个:

inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f my_dir |
  grep --line-buffered '\.ready$' |
  parallel -uj1 echo Do stuff to file {.}
© www.soinside.com 2019 - 2024. All rights reserved.