답변:
inotifywait ( inotify-tools의 일부 )는 목표를 달성하는 데 적합한 도구이며, 여러 파일이 동시에 생성되는지 여부는 중요하지 않습니다.
다음은 샘플 스크립트입니다.
#!/bin/sh
MONITORDIR="/path/to/the/dir/to/monitor/"
inotifywait -m -r -e create --format '%w%f' "${MONITORDIR}" | while read NEWFILE
do
echo "This is the body of your mail" | mailx -s "File ${NEWFILE} has been created" "yourmail@addresshere.tld"
done
inotifywait 는이 옵션을 사용합니다.
-m는 이 스크립트가 종료됩니다 새 파일을 감지 한 후에는,이 옵션을 사용하지 않는 경우, 무기한 디렉토리를 모니터링 할 수 있습니다.
-r 은 재귀 적으로 파일을 모니터링합니다 (더 많은 dir / 파일이있는 경우 새로 작성된 파일을 발견하는 데 시간이 걸릴 수 있음)
-e create 는 모니터링 할 이벤트를 지정하는 옵션이며 새 파일을 처리하기 위해 작성 해야 합니다.
--format '% w % f' 는 /complete/path/file.name 형식으로 파일을 인쇄합니다.
"$ {MONITORDIR}" 은 이전에 정의한 모니터링 할 경로가 포함 된 변수입니다.
그래서 새로운 파일이 생성되는 경우에, inotifywait를이를 감지하여 인쇄 출력한다 (/complete/path/file.name) 파이프를 행 하면서 것이다 가변이를 새에 그 출력을 지정 .
while 루프 안에는 로컬 MTA와 잘 작동 하는 mailx 유틸리티 를 사용하여 주소로 메일을 보내는 방법이 있습니다 (이 경우 Postfix).
여러 디렉토리를 모니터링하려면 inotifywait에서 허용하지 않지만 두 가지 옵션이 있습니다. 모든 디렉토리에 대해 스크립트를 작성하여 스크립트 내부에서 함수를 모니터하거나 작성하십시오.
#!/bin/sh
MONITORDIR1="/path/to/the/dir/to/monitor1/"
MONITORDIR2="/path/to/the/dir/to/monitor2/"
MONITORDIRX="/path/to/the/dir/to/monitorx/"
monitor() {
inotifywait -m -r -e create --format "%f" "$1" | while read NEWFILE
do
echo "This is the body of your mail" | mailx -s "File ${NEWFILE} has been created" "yourmail@addresshere.tld"
done
}
monitor "$MONITORDIR1" &
monitor "$MONITORDIR2" &
monitor "$MONITORDIRX" &
예를 들어, inotifywait를 사용하십시오 .
inotifywait -m /path -e create -e moved_to |
while read path action file; do
echo "The file '$file' appeared in directory '$path' via '$action'"
# do something with the file
done
자세한 정보와 예제
는 inotify-tools를 사용하여 파일 시스템 이벤트에서 스크립트를 트리거하는 방법 기사를 참조하십시오 .
여러 디렉토리에 대해 다음을 수행 할 수 있습니다.
#!/bin/bash
monitor() {
inotifywait -m -r -e attrib --format "%w%f" --fromfile /etc/default/inotifywait | while read NEWFILE
do
echo "This is the body of your mail" | mailx -s "File ${NEWFILE} has been created" "yourmail@addresshere.tld"
done
}
monitor &
다음은 파일의 폴더 목록 예입니다. /etc/default/inotifywait
/etc/default/inotifywait
/home/user1
/path/to/folder2/
/some/path/