创建新文件时扫描 ~/Downloads

创建新文件时扫描 ~/Downloads

我希望添加到 ~/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. 这安全吗?我通过 24/7 运行这样的系统脚本会让事情变得更糟吗?
  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$',但您仍然会获得对初始空文件的额外扫描。

相关内容