10초마다 여러 디렉터리의 특정 파일 생성을 모니터링합니다.

10초마다 여러 디렉터리의 특정 파일 생성을 모니터링합니다.

운영 체제: 우분투 22.04 LTS.
많은 게시물이 파일 모니터링을 다루고 있습니다.하나특히 관심이 있고 이에 기반을 두고 inotifywait있지만 내 목적에 맞게 수정하는 방법을 모르겠습니다.

목적: $HOME/{Documents/,Downloads/,Archive/}링크된 파일이 생성될 때 모니터링합니다. *.lnk이러한 파일은 Wine에서 Word를 사용하여 문서를 생성, 저장, 열기 또는 작업을 수행할 때마다 생성됩니다. *.lnk단 몇 분 만에 수십 개의 파일을 생성할 수 있습니다. 이 질문은 나를 죽이고 있습니다.

배우고 싶지만 일반적인 예를 필요한 것으로 변환할 수 있는 지식이 부족합니다. 저는 일반 파일에서 스크립트를 실행하는 방법을 알고 있지만 이와 관련하여 특별히 알아야 할 사항이 있으면 알려주시기 바랍니다. 미리 보내세요.

답변1

이 작은 스크립트를 파일에 작성하려면 터미널을 사용해야 합니다. bash처음부터 Ubuntu에서 Shell을 사용하고 있다고 가정합니다 . 그렇지 않은 경우에는 알려주시기 바랍니다.

$ touch notify_links
$ chmod u+x notify_links
$ cat notify_script
#!/usr/bin/env bash
inotifywait -mr -e moved_to,create "$HOME"/{Documents,Downloads,Archive} |
while read directory action file; do
    if [[ "$file" =~ .lnk$ ]]; then
        echo rm -f "$file"
    fi
done

이 스크립트를 실행하세요. 이렇게 하려면 notify_links터미널(터미널에서)에서 다음 명령을 실행하세요.

터미널 디스플레이에 표시된 내용에 만족하면 echo스크립트 줄에서 : 를 제거 echo rm -f "$file"하여 rm -f "$file".

편집 1전체 하위 트리 대신 세 개의 디렉터리/폴더를 구체적으로 모니터링하기 위해 @ilkkachu의 의견에 따라 $HOME.

편집 2@Paul_Pedant의 의견에 따르면 시작 프로세스가 완료된 후 10초마다 자동으로 실행하려면 다음을 포함 /etc/crontab하도록 파일을 편집하세요 crontab -e.

 * * * * * $USER for i in $(seq 5); do /usr/bin/find $HOME -name "*.lnk" -delete; sleep 10; done

편집 3더 빠른 결과와 더 적은 리소스 사용을 위해 OP에서 언급한 디렉토리만 검색하는 것이 좋습니다. 다음은 해당 하위 트리를 검색합니다.

 * * * * * $USER for i in $(seq 5); do /usr/bin/find "$HOME"/{Documents,Downloads,Archive} -name "*.lnk" -delete; sleep 10; done

하위 트리가 아래쪽으로 반복되는 것을 방지하려면 find다음 옵션을 추가하세요.-maxdepth 1 앞으로 -name "*.lnk"find명령 에서 .

관련 정보