Shell: 디렉터리의 파일이 변경되었는지 확인

Shell: 디렉터리의 파일이 변경되었는지 확인

나는 그것을 사용하고 있다이노티파이 도구디렉터리의 파일이 수정되었는지 여부를 모니터링하려면 다음을 수행하세요.

while inotifywait -e modify /etc/checking/; do
    curl...
done

그럼에도 불구하고 modify감시 중인 파일이나 감시 디렉터리의 파일을 주의하시기 바랍니다.에 쓰여졌다, 작성된 내용이 동일한지 여부에 관계없이.

새 파일을 보내기 전에 curl이전에 본 파일의 내용이 실제로 변경되었는지 확인하고 싶습니다.

md5sum악용하는 명령을 사용할 생각입니다 .

  1. md5sum따라서 각 파일의 출력을 배열에 저장 해야 합니다 . 어떤 아이디어가 있나요?
  2. 이벤트가 발생 하면 modify이전 이벤트와 md5sum비교

나는 그것을 사용하고 있다#!/usr/bin/env sh

어떤 아이디어가 있나요?

답변1

/etc/checking특정 디렉터리( )의 모든 파일을 재귀적으로 체크섬하고 해당 파일에 체크섬 코드를 쓸 수 있습니다 . 그런 다음 수정 사항을 검색하려면 목록을 실행하여 비교하면 됩니다.

find /etc/checking -type f -exec md5sum {} \; > checklist.chk

checklist.chk는 다음과 같습니다.

bda7d4479b770eb055287d265b62c056  /etc/checklist/file001
83087902bc3bfea5cf8594c7d3f5c350  /etc/checklist/file002
7af7a423d53450e75fc228d6163ae9e6  /etc/checklist/file003

그런 다음 이를 매니페스트와 비교합니다.

md5sum -c checklist.chk

다음과 같이 출력됩니다.

/etc/checklist/file001: OK
/etc/checklist/file002: OK
/etc/checklist/file003: OK

예를 들어 cronjob에 쉽게 추가하여 매일 실행할 수 있습니다.


동일한 명령을 사용하여 매번 새 매니페스트를 출력하고 실행할 수도 있습니다.차이점두 목록 사이의 명령.

답변2

내가 만든다디렉토리 지문이 문제를 해결하는 데 사용할 수 있습니다. 디렉터리 트리의 모든 파일에 대한 지문/체크섬을 생성하고 이를 파일에 저장하며 지문이 변경되었는지도 알려줍니다.

다음을 사용하여 설치할 수 있습니다.

$ brew install nejckorasa/tap/dir-fingerprint

다음과 같이 사용됩니다.

$ dir-fingerprint <path_to_directory>

출력:

Old     [8a7b73f9671004edd50500bc7d3f1837d841a5c086011207259eb2d183823adf]
New     [8a7b73f9671004edd50500bc7d3f1837d841a5c086011207259eb2d183823adf]
@       <path_to_directory>/.fingerprint
Diff    false

.fingerprint파일을 생성 하고

답변3

git루프 처럼 버전 제어를 사용하는 것은 어떻습니까 ? 모든 변경 사항을 모니터링하고 출력을 사용하여 데이터를 구문 분석할 수 있습니다 git status --porcelain. 여기서 데이터 수정인지 새 파일인지 확인할 수 있으며 내용이 실제로 변경되지 않았는지 표시하지 않습니다. 예:

$ git init
$ echo "aa" > file1
$ git add file1
$ git commit -m "initial"
$ echo "bb" > file2
$ echo "aa" > file1
$ git status --porcelain

산출:

?? file2

단점은 inotify실제 파일 시스템과 밀접하게 연결되어 있는 반면 git은 훨씬 더 높은 수준(따라서 오버헤드)이라는 것입니다.

관련 정보