[英]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.