Bash 스크립트는 파일 변경 사항을 모니터링하고 명령을 실행합니다.

Bash 스크립트는 파일 변경 사항을 모니터링하고 명령을 실행합니다.

asciidoctor확장명을 가진 파일 형식이 포함된 여러 하위 폴더가 있는 폴더가 있습니다 .adoc.

파일을 변경할 때마다(자주 발생함) 다음을 실행해야 합니다.

asciidoctor -q filename.adoc

HTML 형식으로 컴파일합니다.

이 프로세스를 자동화하려고 합니다. 지금까지 나는 이것을 사용했다입력하다:

ls *.adoc | entr asciidoctor -q *.adoc

하지만 하위 폴더가 아닌 기존 폴더에서만 작동합니다. 이 변형을 시도했지만 작동하지 않습니다.

find . -name '*.adoc' | entr asciidoctor -q *.adoc

모든 하위 폴더에 대해 이 프로세스를 자동화할 수 있는 방법에 대한 아이디어가 있습니까?

답변1

변경을 시작하기 전에 다음과 같은 타임스탬프를 만드는 것이 좋습니다.

touch time.stamp.file

편집 후 다음을 통해 변경된 모든 파일을 찾을 수 있습니다.

find . -name '*.adoc' -newer time.stamp.file -exec asciidoctor -q {} +

답변2

  1. "*.adoc" 파일 검색
  2. filename.adoc가 filename.html보다 최신인지 테스트합니다.
  3. 그렇다면 asciidoctor를 실행하세요.

    find . -name '*.adoc' | while read FILE; do [ "${FILE}" -nt "${FILE%adoc}html" ] && asciidoctor -q "${FILE}" ; done
    

아니면 스크립트를 넣으세요:

#! /bin/bash
find . -name '*.adoc' | while read FILE; do
    if [ "${FILE}" -nt "${FILE%adoc}html" ]; then
        asciidoctor -q "${FILE}"
    fi
done

crontab에서 1분마다 한 줄 또는 스크립트를 실행할 수 있습니다.

crontab -e

행 추가

* * * * * /home/joe/update_adoc.bash

답변3

이는 오픈 소스 도구를 사용하여 수행할 수 있습니다 monit!

다음을 추가해 보겠습니다 /etc/monit.conf.

check file test with path /path/tp/test
    if changed checksum then exec "/bin/bash /path/to/script.sh" as uid a_user_id and gid a_group_id


a_user_idas를 가진 사용자에게 파일 id에 대한 충분한 권한이 있는지 확인하고 루트로 변경할 때 읽기 및 실행 권한이 있는지 확인해야 합니다 .
/path/to/test
/path/to/script.sh

monit.conf

monit reload 

변경사항 가져오기monit daemon

watch monit status 

monit이벤트가 트리거되면 보고서의 변경 사항이 표시될 수 있습니다.

예를 들어, 이 예에서는
파일의 내용을 변경할 때 /path/to/test/path/to/script.sh 스크립트가 호출됩니다 .

기본적으로 monit30초마다 깨어나 구성된 검사를 수행합니다.

새 파일이 디렉터리에 추가되었는지 또는 디렉터리의 파일이 변경되었는지 확인하려면 다음을 수행하세요.

check directory test2 with path /path/to<br/>
      if changed timestamp then exec "/bin/bash /path/to/script.sh" as uid a_user_id and gid a_group_id

이 구성은 귀하의 애플리케이션 요구 사항에 맞게 쉽게 업데이트될 수 있다고 확신합니다!

관련 정보