특정 파일이 도착하면 쉘 스크립트를 사용하여 프로세스 실행 [닫기]

특정 파일이 도착하면 쉘 스크립트를 사용하여 프로세스 실행 [닫기]

"abc.csv" 파일과 같은 특정 파일이 "mydir"과 같은 디렉터리에 도달하면 쉘 스크립트를 사용하여 프로세스를 실행해야 합니다.

"CSV의 데이터를 테이블로 로드하는 프로그램이 있습니다. 프로세스가 완료되면 소스 파일의 이름이 "filename"으로 변경됩니다._마지막. 같은 이름의 파일이 매일 여러 개 수신될 수 있습니다. "

이 경우 디렉토리에 새 파일이 들어갈 때마다 LINUX 환경에서 쉘 스크립트를 사용하여 프로세스를 실행해야 합니다.

답변1

inotify 도구(http://linux.die.net/man/1/inotifywait).

$ cat monitor_csv.sh
if (( $# == 0)); then
   echo "Usage $0 <directory-to-monitor>"
   exit 1
fi

DIR=$1
while true;
do
    res=$(inotifywait $DIR)
    echo "Get from inotifywait: "$res
    if test -f $DIR/abc.csv; then
        echo "lauching a procedure and breaking out of the loop"
        # bash ./run_procedure.sh
        break
    else
        echo "keep watching"
    fi
done

echo "finished"

예는 다음과 같습니다.

$ ./monitor_csv.sh ./mydir
Setting up watches.  
Watches established.
Get from inotifywait: ./mydir/ CREATE abc2.csv
keep watching
Setting up watches.  
Watches established.
Get from inotifywait: ./mydir/ CREATE abc.csv
lauching a procedure and breaking out of the loop
finished

이 스크립트는 다음과 같이 일부 개선될 수 있습니다.

  1. 사용 시간 초과 inotifywait:

       -t <seconds>, --timeout <seconds>
              Listen for an event for the specified amount of seconds, exiting if an event has not occurred in that time.
    
  2. 정확한 이벤트 유형 지정

    inotifywait -e create -e moved_to ./mydir
    

모든 이벤트 목록:

access      file or directory contents were read
modify      file or directory contents were written
attrib      file or directory attributes changed
close_write file or directory closed, after being opened in
            writeable mode
close_nowrite   file or directory closed, after being opened in
            read-only mode
close       file or directory closed, regardless of read/write mode
open        file or directory opened
moved_to    file or directory moved to watched directory
moved_from  file or directory moved from watched directory
move        file or directory moved to or from watched directory
create      file or directory created within watched directory
delete      file or directory deleted within watched directory
delete_self file or directory was deleted
unmount     file system containing file or directory unmounted

관련 정보