オペレーティングシステム: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
コマンドから。