为了跟踪目录(及其子目录)中新添加的文件,我想使用entr
ls -d /tmp/* | entr -p notify-send "new file added."
但是当我添加新文件时/tmp/
或/tmp/foo/
没有任何反应。我究竟做错了什么?
答案1
使用有特定的用例吗entr
?通常强烈建议不要解析ls
:
为什么*不*解析`ls`(以及做什么来代替)?
我认为在你的情况下你最好使用incrond
:
https://www.howtoforge.com/tutorial/trigger-commands-on-file-or-directory-changes-with-incron/
(IN_CREATE 对您的情况特别感兴趣)
据我所知,incrond
无法观看子目录,因此如果您还需要观看 /tmp 的所有子目录,也许watcher
更适合您的情况:
https://stackoverflow.com/questions/44088179/watch-a-subdirectory-with-incron
请注意,在不知道您的特殊用例的情况下:/tmp 由各种进程使用。尝试跟踪其所有更改可能不是很明智/实际。
答案2
类型
ls -d /tmp/* | entr -p echo "New File"
在一个窗格上。然后在另一个窗格上键入
echo "hello" > /tmp/test123456.txt
请注意,“新文件”在第一个窗格中回显
答案3
我用它来更新 markdown 文本的 html 版本:
# Preview a comment written in Markdown
cpv() {
echo ">INFO> Refreshing preview"
find | entr -d generate_comment_preview.sh
}
cpvr() {
cpv
if [[ $? > 0 ]]; then
echo ">INFO> Launching cpvr again"
cpvr
fi
}
然后我用 Epiphany (gnome-web) 打开该文件,它会自动刷新。