fswatch – 在 Linux 中跟踪文件和目录更改

FSWATCH 是一个跨平台的文件更改监视器,当指定文件或目录的内容被更改或修改时,它会收到通知警报。

它在不同的操作系统上执行四种类型的监视器,例如:

  • 基于 Apple OS X 的文件系统事件 API 构建的监视器。
  • 一个基于 kqueue 的监视器,FreeBSD 4.1 中的通知接口也支持许多 *BSD 系统,包括 OS X。
  • 基于 Solaris 内核及其衍生产品的文件事件通知 API 的监视器。
  • 基于 inotify 的监视器,inotify 是一个内核子系统,用于显示对应用程序的文件系统修改。
  • 基于 ReadDirectoryChangesW 的监视器,ReadDirectoryChangesW 是记录更改到目录的 Windows API。
  • 定期检查文件系统状态的监视器,将文件修改时间保存在内存中,并手动确定文件系统更改(适用于可以使用 stat 的任何地方)。
fswatch的功能
  • 支持多个特定于操作系统的 API
  • 允许递归目录监视
  • 使用包含和排除正则表达式执行路径筛选
  • 支持可自定义的记录格式
  • 此外,它还支持周期性的空闲事件

如何在 Linux 系统中安装 fswatch

要在 Linux 上安装 fswatch,请对您的特定 Linux 发行版使用以下相应的命令。

sudo apt install fswatch         [On Debian, Ubuntu and Mint]
sudo yum install fswatch         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo emerge -a sys-apps/fswatch  [On Gentoo Linux]
sudo apk add fswatch             [On Alpine Linux]
sudo pacman -S fswatch           [On Arch Linux]
sudo zypper install fswatch      [On OpenSUSE]    
sudo pkg install fswatch         [On FreeBSD]

如果 fswatch 无法从默认系统存储库安装,则可以从源代码进行构建,如以下安装说明所示。

首先,使用以下 git 命令克隆最新的 fswatch git 存储库并安装它,如下所示:

git clone https://github.com/emcrisostomo/fswatch.git
cd fswatch
./autogen.sh
./configure
make
sudo make install
重要提示:在从源代码编译 fswatch 之前,请确保系统上安装了 GNU GCC(C 和 C++ 编译器)和开发工具(在 Debian/Ubuntu 上是必不可少的构建)。

如果没有,请使用以下命令在各自的 Linux 发行版上安装它。

sudo dnf group install 'Development Tools'    [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apt-get install build-essential          [On Debian, Ubuntu and Mint]

在 Debian/Ubuntu 发行版上,执行 fswatch 命令时可能会收到以下错误。

fswatch: error while loading shared libraries: libfswatch.so.13: cannot open shared object file: No such file or directory

要修复它,您需要执行以下命令,这将有助于刷新链接并缓存到动态库,然后才能开始使用 fswatch。

sudo ldconfig

如何使用 fswatch 监视 Linux 上的文件更改

运行 fswatch 的一般语法为:

fswatch [option] [path]

在 Linux 上,建议您使用默认的 inotify 监视器,您可以通过使用 or 选项列出可用的监视器:-M- list-monitors

fswatch -M
fswatch --list-monitors

fswatch - 列表监视器

fswatch – 列表监视器

使用以下命令可以监视当前目录 () 中的更改,每 4 秒将事件传递到标准输出。/home/tecmint

or – 选项允许您以秒为单位设置延迟,默认为 1 秒。-l-latency

fswatch -l 4 . 

fswatch - 监控主目录更改

下一个命令每 5 秒监视一次对 /var/log/auth.log 文件的更改:

fswatch -l 5 /var/log/auth.log

使用 or 选项打印每个事件的时间戳,以 UTC 格式打印时间,使用 或 option。您还可以使用或格式化选项来格式化时间:-t--timestamp-u--utf-time-f--format-time

fswatch --timestamp /var/log/auth.log

接下来,或者告诉 fswatch 在事件路径旁边打印事件标志。可以使用 –event-field-seperator 选项来打印使用特定分隔符的事件。-x--event-flags

fswatch --events-flags ~ /var/log/auth.log

要打印指示目录和 /var/log/auth.log 文件中更改的事件的数值,请使用 或 选项,如下所示:-n--numeric

fswatch --numeric ~ /var/log/auth.log 

也许您可以浏览 fswatch 手册页以获取详细的使用选项和信息:

man fswatch

有关更多信息和用法,请访问 fswatch Github 存储库:GitHub - emcrisostomo/fswatch: A cross-platform file change monitor with multiple backends: Apple OS X File System Events, *BSD kqueue, Solaris/Illumos File Events Notification, Linux inotify, Microsoft Windows and a stat()-based backend.

在这篇文章中,我们介绍了一个简单的命令行实用程序,以帮助 Linux 用户在修改指定文件或目录层次结构的内容时收到通知。

我希望安装一切顺利,如果您不是这种情况,请努力通过下面的反馈表与我们联系。此外,如果您以前使用过它,您可能想向我们提供一些关于您使用 fswatch 的经验的想法。

Linux操作系统,监控文件夹也可能无法直接检测到新创建的文件,这是因为文件夹监控器(如inotify)只能检测到已经存在的文件目录更改,而不是文件新增加的文件。 为了解决这个问题,您可以考虑使用一个循环来检查文件是否有新的文件被创建。以下是一个使用循环的示例代码: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <sys/inotify.h> #define EVENT_SIZE (sizeof (struct inotify_event)) #define BUF_LEN (1024 * (EVENT_SIZE + 16)) int main(int argc, char* argv[]) { int length, i = 0; int fd; int wd; char buffer[BUF_LEN]; fd = inotify_init(); if (fd < 0) { perror("inotify_init"); } wd = inotify_add_watch(fd, "/path/to/watch", IN_CREATE); if (wd < 0) { perror("inotify_add_watch"); } while (1) { i = 0; length = read(fd, buffer, BUF_LEN); if (length < 0) { perror("read"); } while (i < length) { struct inotify_event *event = (struct inotify_event *) &buffer[i]; if (event->mask & IN_CREATE) { printf("New file %s created.\n", event->name); } i += EVENT_SIZE + event->len; } } (void) inotify_rm_watch(fd, wd); (void) close(fd); return 0; } ``` 该代码可以监控"/path/to/watch"文件夹,并在该文件创建新文件时发出通知。 当然,这种方法可能会带来一些性能问题,因为它需要定期扫描整个目录树。如果您对性能有更高的要求,可以考虑使用更高级的监控工具,如fswatch。 希望这些信息可以对您有所帮助。如果您有任何其他问题或需要进一步的帮助,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值