簡體   English   中英

列出具有相應“就緒”文件的文件

[英]List files which have a corresponding “ready” file

我有一個服務“ 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

目前沒有准備好的文件。

在上面列出的文件中,只有第一個應被拾取,因為它具有相應的就緒文件。

最明顯的方法是使用繁忙循環。 但是,如果您使用的是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 {.}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM