新規ファイル作成時 ~/ダウンロード検索

新規ファイル作成時 ~/ダウンロード検索

〜/ダウンロード(およびサブフォルダ)に追加されたすべての新しいファイルを検索できるようにしたいと思います。貝殻スキャン

他のオペレーティングシステム/コンピュータで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=740272https://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行の設定には2つの問題があります。先行スペースと無効な変数名です。それに変える

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$'最初は空であったファイルの追加チェックが引き続き提供されます。

関連情報