entr:递归识别新文件

entr:递归识别新文件

为了跟踪目录(及其子目录)中新添加的文件,我想使用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) 打开该文件,它会自动刷新。

相关内容