디렉토리 내용이 업데이트 될 때 명령을 실행하는 방법은 무엇입니까? 자주 바꾸는 디렉토리 가 있습니다. 나는 B지금까지

A다른 사람들이 내용을 자주 바꾸는 디렉토리 가 있습니다.

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

현재 rsync파일을에서로 백업하기 위해 때때로 실행 A됩니다 B. 그러나 일부 파일이에 추가 된 A다음 에 파일 A을 복사 할 수 있기 전에 제거 될 가능성이 있습니다 B.

이를 방지하는 가장 좋은 방법은 무엇입니까? 이상적으로는 내용 A이 변경 될 때마다 현재 백업 스크립트를 실행하고 싶습니다 .



답변

당신이있는 경우 inotify를-도구를 사용할 수있는 설치 inotifywait파일이나 디렉토리에 기록되어있는 경우 작업을 실행하는 데 :

#!/bin/sh
dir1=/path/to/A/
while inotifywait -qqre modify "$dir1"; do
    /run/backup/to/B
done

를 Where -qq스위치가 완전히 침묵, -r재귀 (필요한 경우) 및 -e이 경우, 모니터에 이벤트이다 modify. 보낸 사람 man inotifywait:

수정
감시 파일 또는 감시 디렉토리 내의 파일이 기록되었습니다.


답변

엄밀히 말하면 누군가 파일을 삭제하고 매우 빠르게 제거하면 놓칠 수 있습니다. inotify를 사용하면 (Linux에서 또는 다른 유니스에서 유사한 기능으로) 위험 창을 작게 만듭니다.

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


답변

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'

확인 : entrproject.org 웹 사이트를 자세한 내용은.


답변

찾고있는 프로그램은 inotify입니다.


답변