2017-11-18 1 views
1

요청에서받는 데이터로 구성된 압축 파일을 생성하는 서비스 "A"가 있습니다. 병행하여 이러한 압축 파일을 사용하는 또 다른 서비스 "B"가 있습니다.해당 "준비"파일이있는 파일 나열

"B"는 완전히 작성하지 않으면 파일을 소비하지 않아야합니다. 서비스는 언급 된 확장자와 함께 생성 된 파일과 정확히 동일한 이름을 가진 서비스 "A"에 의해 생성 된 ".ready"파일을 찾아서이 정보를 추론합니다. 압축이 완료되면 서비스 "B"는 Apache Camel을 사용하여 필터링을 수행합니다.

이제 동일한 압축 파일을 필요로하는 쉘 스크립트를 작성 중이며 동일한 필터링이 쉘에서 구현되어야합니다. 이 스크립트 작성에 도움이 필요합니다. 나는 명령을 알고 있지만 순진한 쉘 사용자이므로 매우 제한된 지식을 가지고 있음을 알고 있습니다.

예 :

압축 파일 : sumit_20171118_1.gz.ready

또 다른 압축 파일 : sumit_20171118_2.gz

없음 준비 파일 sumit_20171118_1.gz

준비 파일을 해당 이것에 대한 존재입니다.

위의 파일 중 첫 번째 파일 만 해당 준비 파일이 있으므로 선택해야합니다.

+2

'.ready' 접미사? – melpomene

+0

네, 확실히 옵션입니다. 이 작업을 수행하는 일부 기능/내장 기능이 있는지 궁금합니다. 또는 일반적으로 이러한 경우에 접근하기위한 표준 방법이있는 경우 –

+1

** 서비스 B **가 압축 파일을 찾고 있다면 정상적으로 작동하는 방법은 ** 서비스 A **가 확장자가'.inprogress'이고 파일이 완전히 쓰여지면 ** 서비스 A ** 그 이름이'.gz '로 끝나고 - 따라서 ** Service B **에 원자 적으로 완전한 파일을 배포합니다. –

답변

0

가장 분명한 방법은 통화 중 루프를 사용하는 것입니다. 에 기록 할 때 명령 만 실행됩니다 : 당신도 .ready 파일을 기다릴 필요가 없습니다

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

이 방법 :하지만 당신은 GNU/리눅스에있는 경우 (https://www.gnu.org/software/parallel/man.html#EXAMPLE:-GNU-Parallel-as-dir-processor)에서보다 더 잘 할 수 파일이 완료되고 파일이 닫힙니다.

그러나 .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 {.}