디렉터리 내용이 업데이트될 때 명령을 실행하는 방법은 무엇입니까?

디렉터리 내용이 업데이트될 때 명령을 실행하는 방법은 무엇입니까?

A다른 사람이 내용을 자주 변경하는 디렉토리가 있습니다 .

B나는 지금까지 존재했던 모든 파일을 보관하는 개인 디렉토리를 만들었습니다 A.

rsync현재는 백업할 A파일을 얻기 위해 가끔씩만 실행합니다 B. 하지만 일부 파일이 A.에 추가된 다음 . A에 복사 될 수 있다는 우려가 있습니다 B.

이런 일이 발생하지 않도록 하는 가장 좋은 방법은 무엇입니까? 이상적으로는 A변경 사항이 있을 때마다 현재 백업 스크립트를 실행 하고 싶습니다 .

답변1

당신이 가지고 있다면이노티파이 도구inotifywait설치 후 파일이나 디렉터리가 다음에 기록되면 이를 사용하여 작업을 트리거할 수 있습니다.

#!/bin/sh
dir1=/path/to/A/
while inotifywait -qqre "attrib,modify,close_write,move,move_self,create,delete,delete_self" "$dir1"; do
    /run/backup/to/B 
done

스위치 -qq가 완전히 조용하고 -r재귀적이며(필요한 경우) -e모니터링할 이벤트입니다. ~에서man inotifywait:

속성 감시된 파일 또는 감시된 디렉터리에 있는 파일의 메타데이터가 수정되었습니다. 여기에는 타임스탬프, 파일 권한, 확장 속성 등이 포함됩니다.

조정감시 파일이나 감시 디렉토리의 파일에 기록됩니다.

글쓰기 닫기감시된 파일 또는 감시된 디렉터리의 파일이 쓰기 가능 모드로 열린 후 닫혔습니다. 이는 반드시 파일이 작성되었음을 의미하지는 않습니다.

이동하다파일이나 디렉터리가 감시 디렉터리에서 이동되었거나 감시 디렉터리로 이동되었습니다. 이는 실제로 Moving_to 및 Moving_from을 수신하여 수행되므로 수신된 닫기 이벤트는 MOVE가 아닌 둘 중 하나로 출력됩니다.

move_self모니터링되는 파일 또는 디렉터리가 이동되었습니다. 이 이벤트 후에는 파일이나 디렉터리가 더 이상 모니터링되지 않습니다.

만들다모니터링되는 디렉터리에 파일 또는 디렉터리가 생성되었습니다.

삭제감시 디렉터리의 파일이나 디렉터리가 삭제되었습니다.

자신을 삭제모니터링되는 파일 또는 디렉터리가 삭제되었습니다. 이 이벤트 후에는 파일이나 디렉터리가 더 이상 모니터링되지 않습니다. 이 이벤트를 명시적으로 수신하지 않는 경우에도 이 이벤트가 발생할 수 있습니다.

답변2

노력하다entr파일이 변경되면 임의의 명령을 실행할 수 있는 명령줄 도구입니다. 버전 2.9부터 디렉터리에 새 파일이 추가될 때 이벤트에 반응하도록 디렉터리 모니터링 옵션( -d)이 추가되었습니다.

프로젝트에 새 파일이 추가된 경우 유틸리티 실행의 예:

$ while true; do
> echo src/* | entr -d your_command
> done

디렉터리 감시 모드에서는 각 파일의 상위 디렉터리가 감시 목록에 암시적으로 추가됩니다.

유일한 의미는 새 파일이 나타나면 외부 셸이 파일 시스템을 반복하고 다시 검색할 수 있도록 종료해야 한다는 것입니다.

디렉터리 모니터링 옵션이 없는 버전은 다음과 같습니다.

$ while true; do
> echo src/* src | entr your_command
> done

다음은 필요에 따라 더 간단한 예입니다.

$ ls -d * | entr sh -c 'rsync -vuar A B'

확인하다:eradman.com/entrproject자세한 내용은 웹사이트를 참조하세요.

답변3

엄밀히 말하면 누군가 파일을 삭제하고 빠르게 삭제하면 놓칠 수도 있습니다. 어떤 것의 목적을 가리킨다.inotify(Linux에서는 또는 다른 unice에서는 유사한 기능) 위험 창을 더 작게 만듭니다.

해당 디렉토리에 원하는 파일 시스템을 마운트할 수 있다면(이것이 옵션이 아닐 수도 있음을 알고 있습니다) 모든 파일 버전을 기록하는 시스템을 넣을 수 있습니다.파일 복사.

답변4

당신이 찾고 있는 프로그램은inotify.

관련 정보