Scan ~ / Downloads na criação de novos arquivos

3

Eu quero que todos os novos arquivos adicionados a ~ / Downloads (e subpastas) sejam verificados com clamscan .

Ao usar o Firefox em outros sistemas operacionais / máquinas, percebi que os arquivos baixados às vezes são automaticamente verificados. Embora eu esteja executando especificamente uma versão home-roll-based baseada no Debian nesta máquina, a solução deve funcionar para outras distribuições GNU / Linux, em particular a família de distribuições baseada no Slackware onde eu também gostaria de implementá-la.

Baseado em este post "script-para-monitor-pasta- for-new-files " Eu encontrei o que foi respondido anteriormente aqui, eu tenho o seguinte que não parece funcionar muito bem (eu corri e, em seguida, fiz um arquivo usando thunar o gerenciador de arquivos xfce e sem pop-ups apareceu.):

#!/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

Estou usando o zenity para formar a mensagem pop-up porque, pelo que posso dizer, xdialog foi descontinuado de acordo com um comentário aqui . Para referência, uma cópia da página de manual inotifywait está aqui , e esta página de manual de informações atualizadas também pode ser útil (um post referente à inotifywait que encontrei aqui tinha linkado a ela).

  1. Como posso corrigir isso para que seja executado?
  2. Isso é seguro? Estou piorando as coisas executando 24/7 um script de sistema como este?
  3. Existe alguma chance de que a saída seja executada / devo fazer alguma forma de regex no $CLAMSCAN_OUTPUT ou $DIALOG_TEXT para proteger o sistema de saída malformada?
  4. (Eu sei que isso é aberto, então ignore se isso te incomoda) É este o caminho "errado" / existe um método mais seguro recomendado?

Atualizar

Acontece que zenity também estava falhando.

Depois que eu tentei terminá-lo, na verdade eu obtive a saída echo . O erro parece ser semelhante ao descrito no link e link . Também é reproduzível em uma nova instalação oficial do Xubuntu 14.04lts que acabei de testar. É lamentável, pois --notification não é intrusivo, enquanto --error exige interação do usuário.

Com base nas sugestões do @Anthon e do @JigglyNaga para melhorá-lo, o seguinte é o novo script:

#~ 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
    
por ConfusedStack 09.11.2014 / 06:14

1 resposta

1

A configuração de linha DIALOG_TEXT tem dois problemas - um espaço inicial e o nome da variável incorreto. Mude para

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

Para manipular nomes de arquivos com espaços, altere as citações da seguinte forma:

CLAMSCAN_OUTPUT=$(clamscan "$file")

Quando o Firefox está fazendo o download, ele cria um arquivo de espaço reservado vazio e faz o download para $ filename.part e renomeia quando concluído. Você pode filtrar os arquivos que terminam .part com --exclude '\.part$' , mas você ainda obterá uma varredura extra do arquivo vazio inicial.

    
por 09.11.2014 / 14:56