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


当前回答

你可以使用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选项。有关更多信息,请参阅启动手册页。

其他回答

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

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

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

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

看-n3你的命令

你可以使用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选项。有关更多信息,请参阅启动手册页。

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

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

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

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

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