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


当前回答

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

其他回答

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

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

如果你想使用NodeJS,你可以使用一个名为chokidar(实际上是chokidar-cli)的包来监视,然后使用rsync (Mac包含):

Rsync司令部:

$ rsync -avz——排除'some-file'——排除'some-dir'。/的/我的/目的地”

Chokidar cli(通过npm全局安装):

Chokidar \"**/*\" -c \"your-rsync-command-above\"

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

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

你可以使用launchd来实现这个目的。Launchd可以配置为当文件路径被修改时自动启动程序。

例如,下面的launchd config plist将在我的用户帐户的桌面文件夹被修改时启动程序/usr/bin/logger:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>logger</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/logger</string>
        <string>path modified</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/Users/sakra/Desktop/</string>
    </array>
</dict>
</plist>

要激活配置plist,请将其保存到库文件夹中的LaunchAgents文件夹“logger.plist”。

然后,您可以在shell中使用命令launchctl激活记录器。通过运行Plist:

$ launchctl load ~/Library/LaunchAgents/logger.plist

现在正在监视桌面文件夹。每次它被更改时,您都应该在system.log中看到一个输出(使用Console.app)。 要停用记录器。plist,运行:

$ launchctl unload ~/Library/LaunchAgents/logger.plist

上面的配置文件使用WatchPaths选项。或者,您也可以使用 QueueDirectories选项。有关更多信息,请参阅启动手册页。

我的fswatch的分支提供了inotifywait -m的功能,稍微少一点(没有等待,更多!)我在Linux上使用inotifywait…)解析友好的输出有很多问题。

它是对原始fswatch的改进,因为它通过STDOUT发送更改后的文件的实际路径,而不是要求您提供它所派生的程序。

它是我用来实现自动化的一系列可怕的bash脚本的坚实基础。

(这是跑题了)Linux上的inotifywait,另一方面,需要大量的拼凑,我仍然没有找到一个好方法来管理它,尽管我认为基于node.js的东西可能是票据。