폴더에서 새 파일을 모니터링하고 새 파일이 감지되면 명령을 실행하는 도구

폴더에서 새 파일을 모니터링하고 새 파일이 감지되면 명령을 실행하는 도구

새 파일이 폴더에 추가되면 즉시 감지하는 방법스크립트?

폴더에 파일이 생성되자마자 스크립트가 파일을 처리하도록 하고 싶습니다. 시간을 맞추는 것 외에 다른 방법은 없나요?매분마다 새 파일을 확인하는 작업이요?

답변1

사용을 고려해야 합니다.inotifywait, 예를 들어:

inotifywait -m /path -e create -e moved_to |
    while read dir action file; do
        echo "The file '$file' appeared in directory '$dir' via '$action'"
        # do something with the file
    done

우분투 inotifywait에서는inotify-tools.

버전 3.13(현재 Ubuntu 12.04)부터 inotifywait옵션이 없는 파일 이름이 포함됩니다 -f. 이전 버전에서는 강제 실행이 필요할 수 있습니다.

-e선택은 이벤트 inotifywait필터링을 수행하는 가장 좋은 방법입니다. 또한 read명령을 사용하면 사용하거나 무시하도록 선택할 수 있는 여러 변수에 위치 출력을 할당할 수 있습니다. 출력을 전처리하기 위해 grep/sed/awk를 사용할 필요가 없습니다.

답변2

방금 이 작업을 수행했는데 검사 사이에 파일이 손실될 가능성이 약간 있다는 것 외에는 큰 문제를 발견하지 못했습니다.

while true
do
       touch  ./lastwatch
       sleep 10
       find /YOUR/WATCH/PATH -cnewer ./lastwatch -exec SOMECOMMAND {} \;
done

파일을 처리하는 데 너무 오랜 시간이 걸리지 않는다면 새 파일을 놓치지 마세요. 활동의 배경을 설정할 수도 있습니다... 방탄은 아니지만 inotify와 같은 외부 도구 없이도 일부 목적을 달성할 수 있습니다.

답변3

나는 선호한다incron, 관리하기가 더 쉽기 때문입니다. 기본적으로 이는 활용되는 서비스이며 inotify파일 변경 작업에 따라 조치를 취하도록 구성을 설정할 수 있습니다.

전임자:

<directory> <file change mask> <command or action>  options
/var/www/html IN_CREATE /root/scripts/backup.sh

여기에서 전체 예를 볼 수 있습니다. http://www.cyberciti.biz/faq/linux-inotify-examples-to-replicate-directories/

답변4

새 파일을 감지하려면 해당 파일을 처리하고 최종적으로 사용할 수 있는 처리된 파일을 삭제하세요.시스템 경로. 이 방법은 inotify를 기반으로 합니다. DirectoryNotEmpty 옵션이 있으므로 systemd는 디렉토리에서 파일을 감지할 때 항상 스크립트를 실행할 수 있습니다. 후속 파일을 삭제할 수 있고 스크립트가 디렉토리를 비워둔 경우에만 작동한다는 점을 기억해야 합니다.

먼저 mymonitor.service 파일을 준비하세요

[Unit]
Description=Start the script

[Service]
Type=oneshot
ExecStart=/path/to/your/script

다음으로 mymonitor.path로 이동하여 경로를 정의하세요.

[Unit]
Description= Triggers the service

[Path]
DirectoryNotEmpty=/path/to/monitor

[Install]
WantedBy=multi-user.target

.path 파일의 이름이 서비스 이름과 동일한 경우 .path 파일에 서비스 이름을 지정할 필요가 없습니다.

그것은 기반으로합니다바보들을 위한 파일 액세스 모니터링

관련 정보