我想在我的Mac上监视一个文件夹,然后执行一个bash脚本,将刚刚移动到或在监视目录中创建的任何文件/文件夹的名称传递给它。


当前回答

下面是使用sschober工具的一行代码。

$ while true; do kqwait ./file-to-watch.js; script-to-execute.sh; done

其他回答

我可以全心全意地推荐使用watchexec。内置Rust和它只是工作™,无论你在哪个平台上!还有简单的CLI选项。

这里只是提到,当文件发生变化时,entr可以作为OSX上运行任意命令的替代选项。我发现它既简单又有用。

在macos上酿造安装入口 在Debian/Ubuntu上安装entr

Facebook的看门人(watchman)在Homebrew上也很好用。它还支持过滤:

这两行代码在源目录上建立一个监视,然后进行设置 在名为buildme的触发器上运行一个名为miniify -css的工具 每当CSS文件被更改时。工具将被传递一个列表 改变文件名。 $ watchman watch ~/src $ watchman—trigger ~/src buildme '*.css'—mini -css

注意,路径必须是绝对的。

我最终为macOS做了这个。我相信这在很多方面都很糟糕:

#!/bin/sh
# watchAndRun
if [ $# -ne 2 ]; then
    echo "Use like this:"
    echo "   $0 filename-to-watch command-to-run"
    exit 1
fi
if which fswatch >/dev/null; then
    echo "Watching $1 and will run $2"
    while true; do fswatch --one-event $1 >/dev/null && $2; done
else
    echo "You might need to run: brew install fswatch"
fi

Sudo fs_usage -f filesys | grep“有趣的事情”?