有没有像“看”或Mac上的“inotifywait”的命令?(Is there a command

2019-07-20 18:47发布

我想看我的Mac(雪豹)的文件夹,然后执行一个脚本(给它什么刚搬进一个文件夹中的文件名(作为参数...... x.sh“文件名”))。

我有一个脚本都在bash(x.sh)写上去,将移动输入$ 1 I只需要OSX给我的文件名时,新的文件/文件夹移动/创建成目录的一些文件和其他的东西。

任何这样的命令?

Answer 1:

fswatch

fswatch是使用Mac OS X FSEvents API监测目录的小程序。 当接收到任何关于变化到该目录的事件时,指定的外壳命令由执行/bin/bash

如果你是在GNU / Linux, inotifywatch (的一部分inotify-tools包在大多数分布)提供类似的功能。

更新: fswatch现在可以跨多个平台,包括BSD,Debian和Windows中使用。

语法/一个简单的例子

新的方式,可以看多路径-为版本1.x和更高

fswatch -o ~/path/to/watch | xargs -n1 -I{} ~/script/to/run/when/files/change.sh

注:输出数-o将被添加到年底xargs如果不是命令的-I{} 如果你选择使用该号码,地点{}在命令中的任何地方。

0.X版本较旧的方式:

fswatch ~/path/to/watch ~/script/to/run/when/files/change.sh

安装与家酿

截至13年9月12日它被添加回以自制 -耶! 因此,更新您的公式列表( brew update ),然后所有你需要做的是:

brew install fswatch

安装家酿无

键入以下命令Terminal.app

cd /tmp
git clone https://github.com/alandipert/fswatch
cd fswatch/
make
cp fswatch /usr/local/bin/fswatch

如果你没有一个c您的系统上编译器,你可能需要安装的Xcode或Xcode中的命令行工具-都是免费的。 但是,如果是这样的话,你应该只是检查出自制 。

其他选项fswatch 1.x版本

Usage:
fswatch [OPTION] ... path ...

Options:
 -0, --print0          Use the ASCII NUL character (0) as line separator.
 -1, --one-event       Exit fsw after the first set of events is received.
 -e, --exclude=REGEX   Exclude paths matching REGEX.
 -E, --extended        Use exended regular expressions.
 -f, --format-time     Print the event time using the specified format.
 -h, --help            Show this message.
 -i, --insensitive     Use case insensitive regular expressions.
 -k, --kqueue          Use the kqueue monitor.
 -l, --latency=DOUBLE  Set the latency.
 -L, --follow-links    Follow symbolic links.
 -n, --numeric         Print a numeric event mask.
 -o, --one-per-batch   Print a single message with the number of change events.
                       in the current batch.
 -p, --poll            Use the poll monitor.
 -r, --recursive       Recurse subdirectories.
 -t, --timestamp       Print the event timestamp.
 -u, --utc-time        Print the event time as UTC time.
 -v, --verbose         Print verbose output.
 -x, --event-flags     Print the event flags.

See the man page for more information.


Answer 2:

您可以使用的launchd用于这一目的。 的launchd可以被配置为当一个文件路径被修改以自动启动的程序。

例如,下面的launchd配置的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文件夹中Library文件夹为“logger.plist”。

从贝就可以使用命令launchctl通过运行激活logger.plist:

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

桌面文件夹现在已经被监控。 每当它改变你应该看到在SYSTEM.LOG输出(使用Console.app)。 要停用logger.plist,运行:

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

上面的配置文件使用WatchPaths选项。 另外,您也可以使用QueueDirectories选项。 见的launchd了解更多信息手册页。



Answer 3:

Facebook的守望者 ,通过自制可用,也看起来不错。 它也支持过滤:

这两条线建立在源目录中的手表,然后又成立了一个名为“buildme”将运行一个名为“缩小CSS的”每当一个CSS文件被更改工具触发。 该工具会通过改变文件名列表。

$ watchman watch ~/src

$ watchman -- trigger ~/src buildme '*.css' -- minify-css

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



Answer 4:

你可能想看看(也许扩大)我的小工具kqwait 。 目前,它只是坐在那里,等待对单个文件写事件,而kqueue的架构允许分层堆放事件...



Answer 5:

看门狗是看文件/目录一个跨平台的Python API,它已内置“招数”的工具,它允许你触发动作(包括shell命令),当事件发生时(包括新添加的文件,删除文件和更改的文件)。



Answer 6:

这仅仅是提ENTR作为OSX的替代文件时更改为运行任意命令。 我觉得它简单实用。



Answer 7:

编辑: fsw已并入fswatch 。 在这种应答,任何参考fsw现在应该读fswatch

我写了一个fswatch在C ++中称为替代fsw设有几项改进:

  • 这是它建立在任何支持平台上的GNU编译系统项目(OS X诉> = 10.6)与

     ./configure && make && sudo make install 
  • 多个路径可以不同的参数传递:

     fsw file-0 ... file-n 
  • 它转储所有事件信息,如详细记录:

     Sat Feb 15 00:53:45 2014 - /path/to/file:inodeMetaMod modified isFile 
  • 其输出是容易解析使得fsw输出可以被管道输送到另一个进程。

  • 延迟可以定制-l, --latency
  • 数字事件标志可写的,而不是那些文字与-n, --numeric
  • 时间格式可以使用自定义strftime与格式字符串-t, --time-format
  • 时间可以是机器(默认)或UTC时间与本地时间-u, --utc-time

获取FSW:

fsw是托管在GitHub上 ,可以得到克隆其存储库:

    git clone https://github.com/emcrisostomo/fsw

安装FSW:

fsw可以使用以下的命令安装:

    ./configure && make && sudo make install

更多的信息:

我也写了一个介绍性的博客文章 ,你可以找到一个关于如何几个例子fsw作品。



Answer 8:

下面是一个使用一个班轮sschober的工具 。

$ while true; do kqwait doc/my_file.md; make; done


Answer 9:

苹果OSX 文件夹操作 ,您可以根据一个文件夹上采取行动,自动执行任务。



Answer 10:

我的叉子fswatch提供的功能inotifywait -m略少(没有等待,更多!我有很多更多的麻烦在Linux上inotifywait ...)解析友好的输出。

它是在原来的改进fswatch ,因为它发出更改的文件在STDOUT的实际路径,而不是要求您提供它叉的程序。

它已经坚如磐石一系列我使用自动化的东西可怕的bash脚本的基础。

(这是题外话) inotifywait在Linux上,而另一方面,需要在它上面的很多组装机的,我还没有想出一个好办法来管理它,但我认为基于什么node.js可能是票。



Answer 11:

我有一个GIST,这和使用是非常简单的

watchfiles <cmd> <paths...>

为了说明这一点,下面的命令将回显Hello World每一次file1file2的变化; 和默认间隔检查为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使得watchfiles悄悄执行( #将被显示,使用户可以看到该程序正在执行)
  • -qq使得watchfiles执行完全悄然
  • -h显示帮助和用法

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



Answer 12:

最后我做这个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


Answer 13:

这里有一个简单的一行替代为没有谁的用户watch的命令谁希望执行一个命令每3秒:

while :; do your-command; sleep 3; done

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

watch -n3 your-command



文章来源: Is there a command like “watch” or “inotifywait” on the Mac?