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


当前回答

看门狗是一个跨平台的python API,用于监视文件/目录,它有内置的“诡计”工具,允许您在事件发生时触发动作(包括shell命令)(包括新添加的文件,删除的文件和更改的文件)。

其他回答

Apple OSX文件夹操作允许您根据对文件夹采取的操作自动化任务。

我有一个关于这个的主旨,用法很简单

watchfiles <cmd> <paths...>

为了说明,下面的命令将在每次file1或file2更改时回显Hello World;默认的间隔检查是1秒

watchfiles 'echo Hello World' /path/to/file1 /path/to/file2 

如果我想每5秒检查一次,我可以使用-t标志

watchfiles -t 'echo Hello World' /path/to/file1 /path/to/file2 

-v开启verbose模式,显示调试信息 -q使监视文件安静地执行(将显示#,以便用户可以看到程序正在执行) -qq使监视文件完全安静地执行 -h显示帮助和用法

https://gist.github.com/thiagoh/5d8f53bfb64985b94e5bc8b3844dba55

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

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

我最终为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

这里有一个简单的单行替代方案,供那些没有watch命令但又想每3秒执行一次命令的用户使用:

而:;做您的命令;睡眠3;完成

这是一个无限循环,基本上与执行以下操作相同:

看-n3你的命令