
에서 영감을 받다이 슈퍼유저 답변다음 스크립트를 작성하여 copy_library.sh
다음과 같은 파일과 동일한 폴더에 저장했습니다 library.bib
.
#!/bin/sh
while inotifywait -e close_write library.bib; do
cp -f ./library.bib ../other_place/ ;
echo "Library copied"
done
./copy_library.sh
첫 번째 복사 후 프로세스가 종료되면서 이 스크립트를 수동으로 시작하면 (성공적으로 작동함):
londonrob ~/mydir
> ./copy_library.sh
Setting up watches.
Watches established.
library.bib CLOSE_WRITE,CLOSE
Library copied
Setting up watches.
Watches established.
londonrob ~/mydir
>
더 이상 변경 사항이 추적되지 않습니다. 나는 이 스크립트로 뭔가를 해야 한다고 확신하므로 수동으로 시작할 필요 없이 "백그라운드에서" 계속 실행됩니다.
근데 뭐?
답변1
매뉴얼 페이지 에서 inotifywait
:
inotifywait는 Linux의 inotify(7) 인터페이스를 사용하여 파일 변경을 효율적으로 기다립니다. 쉘 스크립트에서 파일 변경을 기다리는 데 적합합니다. 이벤트가 발생하면 종료하거나 이벤트가 발생할 때마다 계속해서 실행하고 출력할 수 있습니다.
그리고
-m, --monitor 단일 이벤트를 수신한 후 종료하는 대신 무기한 실행합니다. 기본 동작은 첫 번째 이벤트가 발생한 후 종료하는 것입니다.
편집: 15초마다 추가되는 로그가 있습니다. 다음 스크립트는 inotifyread가 출력한 각 줄에 대해 while 루프를 실행합니다.
#!/bin/sh
inotifywait -e modify /tmp/modem_log.csv -m | while read line; do
echo "$line"
echo "Copy coperation here..."
done
귀하의 경우에는 물론 이벤트(수정)를 close_write로 변경해야 합니다.