10秒ごとに複数のディレクトリの特定のファイル生成を監視します。

10秒ごとに複数のディレクトリの特定のファイル生成を監視します。

オペレーティングシステム:Ubuntu 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完全なサブツリーの代わりに3つのディレクトリ/フォルダを具体的に監視するために@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コマンドから。

おすすめ記事