새 파일 생성 시 ~/다운로드 검색

새 파일 생성 시 ~/다운로드 검색

~/Downloads(및 하위 폴더)에 추가된 모든 새 파일을 검색할 수 있도록 하고 싶습니다.조개 스캔.

다른 운영 체제/컴퓨터에서 Firefox를 사용할 때 다운로드한 파일이 자동으로 검사되는 경우가 있습니다. 특별히 이 컴퓨터에서 Debian 기반 home-roll-ish를 실행하는 동안 이 솔루션은 다른 GNU/Linux 배포판, 특히 배포하고 싶은 Slackware 기반 배포판 제품군에서 작동할 것입니다.

기반으로이 문서 "새 파일에 대한 폴더를 모니터링하는 스크립트"이전에 여기에 답변된 것을 발견했습니다. 다음이 있지만 제대로 작동하지 않는 것 같습니다(실행한 다음 사용했습니다).투나드이것xfce파일 관리자인데 팝업이 나타나지 않습니다. ):

#!/bin/bash   
PATH_TO_WATCH="$(pwd)"
inotifywait -m /$PATH_TO_WATCH -e create -e moved_to |
    while read path action file; do
       CLAMSCAN_OUTPUT="$(clamscan $file)" 
       DIALOG_TEXT= "The file '$file' appeared in directory '$path' via '$action'. Clamscan was run on $file, generating the following output: $OUTPUT"
       echo $DIALOG_TEXT
       zenity --notification --text=$DIALOG_TEXT
    done

나는 사용하고있다내가 아는 한, 팝업 메시지를 작성하는 것은대화 상자더 이상 사용되지 않음여기 댓글을 토대로. 참고용 사본 inotifywait 매뉴얼 페이지는 여기에 있습니다., 이언급되지 않은 맨페이지도움이 될 수도 있습니다(여기서 inotifywait에 대해 찾은 게시물이 링크되어 있습니다).

  1. 이 문제를 어떻게 해결하고 실행할 수 있나요?
  2. 이거 안전한가요? 연중무휴로 이와 같은 시스템 스크립트를 실행하면 상황이 더 악화됩니까?
  3. 출력을 수행할 가능성이 있습니까/ $CLAMSCAN_OUTPUT정규식을 수행 해야 하거나 $DIALOG_TEXT잘못된 출력으로부터 시스템을 보호해야 합니까?
  4. (이것은 개방형이라는 것을 알고 있으므로 귀찮다면 무시하십시오.) 이것이 "잘못된 방법"입니까/추천할 수 있는 더 안전한 방법이 있습니까?

고쳐 쓰다

zenity이것도 고장난 것으로 밝혀졌습니다 .

종료하려고 하면 실제로 echo출력이 표시됩니다. 오류는 설명된 오류와 유사한 것 같습니다.https://bugzilla.redhat.com/show_bug.cgi?id=740272, 그리고https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=716717. 또한 방금 테스트한 공식 Xubuntu 14.04lts를 새로 설치해도 재현됩니다. 안타깝게도 --notification눈에 거슬리지는 않지만 --error사용자 상호 작용이 필요합니다.

@Anthon 및 @JigglyNaga가 제안한 개선 사항을 기반으로 한 새로운 스크립트는 다음과 같습니다.

#~ This script watches recursively for changes in a folder and then scans new files/folders.
#!/bin/bash 

#~  which folder to watch, here the current directory is used 
PATH_TO_WATCH="$(pwd)"

#~  While notification would be better, not used because of bug similar to "Debian Bug report logs - #716717"
#~  ZENITY_OUTPUT_METHOD="--notification"
ZENITY_OUTPUT_METHOD="--error"

#~  Initial notification stating the script is now active.   
INIT_OUTPUT="A scanning script is now waiting on '$PATH_TO_WATCH'"
echo $INIT_OUTPUT
zenity $ZENITY_OUTPUT_METHOD --text="'$INIT_OUTPUT'"

#~ Recursively wait for new files/folders then loop through the list and scan them
inotifywait -r -m /$PATH_TO_WATCH -e create -e moved_to |
    while read path action file; do
       PRESCAN_OUTPUT="Now scanning '$file' which appeared in directory '$path' via '$action'."
       echo $PRESCAN_OUTPUT
       zenity $ZENITY_OUTPUT_METHOD --text="'$PRESCAN_OUTPUT'"
       #~   Wait 5 seconds to scan, just in case it is still being created.
       sleep 5s 
       #~   Scan the new file/folder and save the output to display 
       CLAMSCAN_OUTPUT=$(clamscan "$file")
       DIALOG_TEXT="Clamscan was run on $file, generating the following output: $CLAMSCAN_OUTPUT"
       #~   Tell user files have been scaned and show results
       echo $DIALOG_TEXT
       zenity $ZENITY_OUTPUT_METHOD --text="'$DIALOG_TEXT'"
    done

답변1

DIALOG_TEXT 줄 설정에는 두 가지 문제가 있습니다. 선행 공백과 잘못된 변수 이름입니다. 그것을로 바꾸다

DIALOG_TEXT="The file '$file' appeared in directory '$path' via '$action'. Clamscan was run on $file, generating the following output: $CLAMSCAN_OUTPUT"

공백이 포함된 파일 이름을 처리하려면 다음과 같이 참조를 변경하십시오.

CLAMSCAN_OUTPUT=$(clamscan "$file")

Firefox를 다운로드할 때 빈 자리 표시자 파일을 생성하고 $filename.part에 다운로드한 다음 완료되면 이름을 바꿉니다. .part 로 끝나는 파일을 필터링할 수 있지만 --exclude '\.part$'처음에는 비어 있던 파일에 대한 추가 검사가 계속 제공됩니다.

관련 정보