![每 10 秒监控多个目录中特定文件的创建情况](https://linux22.com/image/207172/%E6%AF%8F%2010%20%E7%A7%92%E7%9B%91%E6%8E%A7%E5%A4%9A%E4%B8%AA%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%89%B9%E5%AE%9A%E6%96%87%E4%BB%B6%E7%9A%84%E5%88%9B%E5%BB%BA%E6%83%85%E5%86%B5.png)
操作系统: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根据 @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
命令中。