Linux中文件更改时如何执行命令?

如果您想了解如何在工作目录中的任何文件更改以及创建新文件时运行 Linux 命令,那么您来对地方了。

在 Linux 中,您可以使用 cron 来安排命令在特定时间运行。

但是,如果每次修改文件或将新文件添加到目录时都需要运行命令怎么办?

这也很容易实现,并且有一些命令行工具可以执行此操作。

让我们开始吧!

手表执行器

手表执行器 是一个方便且独立的工具,它监视给定的工作目录并在检测到文件更新或新文件创建等任何更改时执行命令。

特征

  • 它不需要涉及 xargs(扩展参数)的复杂命令行。
  • 实时检查当前目录和所有子目录的变化。
  • 不需要语言运行时,它不连接到任何特定的语言或生态系统。
  • 默认使用 .gitignore 和 .ignore 来决定忽略哪些文件的通知。
  • 进程组用于跟踪分叉程序。
  • 支持观看具有特定扩展名的文件。
  • 它与 OS X、Linux 和 Windows 兼容。
  • 基于 glob 过滤和忽略事件(用于查找部分相同文件名的文件搜索模式是可能的。

安装watchexec

要轻松安装 watchexec 工具,请将以下链接粘贴到终端或 shell 提示符中,然后按 enter。

Linux 和 macOS

curl -sS https://webinstall.dev/watchexec | bash

安装成功后,路径会显示在屏幕上。 就我而言,此工具安装在 /root/.local/bin

┌──(root💀kali)-[~]
└─# curl -sS https://webinstall.dev/watchexec | bash

Thanks for using webi to install '[email protected]' on 'Linux/x86_64'.
Have a problem? Experience a bug? Please let us know:
        https://github.com/webinstall/webi-installers/issues

Lovin' it? Say thanks with a Star on GitHub:
        https://github.com/webinstall/webi-installers

Found /root/Downloads/webi/watchexec/cli-v1.18.9/watchexec-1.18.9-x86_64-unknown-linux-musl.tar.xz
Extracting /root/Downloads/webi/watchexec/cli-v1.18.9/watchexec-1.18.9-x86_64-unknown-linux-musl.tar.xz
Installing to /root/.local/opt/watchexec-vcli-v1.18.9/bin/watchexec
Installed 'watchexec vcli-v1.18.9' as /root/.local/bin/watchexec

安装后,导航到 .local/bin 存储库并使用这些命令检查文件是否存在。

cd .local/bin

ls

下一步是导出使用 watchexec 工具的路径。

export PATH="/root/.local/bin:$PATH"

要运行,只需以 root 用户身份在终端中键入 watchexec。 使用此命令查看哪些标志和选项可以与 watchexec 工具一起使用。

watchexec --help

示例示例命令

  • 当此目录/子目录中的任何文件更改时调用 ls -la。 每当检测到任何修改时,此命令都会显示目录中存在的所有文件。
watchexec -- ls -la
  • 每当当前目录中的任何 python、js、CSS 或 Html 扩展文件发生更改时,运行该命令。 在这里你可以传递你想要的任何命令。 文件扩展名应以逗号分隔。
 watchexec --exts py,js,css,html <command>
  • 当 lib 或 src 中的任何文件更改时运行命令。 “-w”选项监视系统中的特定文件或目录。
watchexec -w lib -w src <command>
  • 当当前目录(和所有子目录)中的任何文件发生更改时,调用/重新启动任何服务。
watchexec -e html -r tor

watchexec -e js,py -r mysql

在这里,如果进程或服务正在系统中运行,“-r”选项会重新启动它。

  3D 打印是如何工作的?

有关更多 watchexec 使用示例,您可以访问 官方 GitHub 存储库.

进入

进入 是一个简单而出色的命令行实用程序,用于在给定目录中发生任何修改时运行任意命令。

“entr”代表事件通知测试运行程序。 创建此工具的目的是进行快速反馈和自动化测试。

安装

entr 预装在 Linux 发行版中。 如果它丢失,您需要手动安装它。

该工具使用简单,可以使用以下命令安装。

sudo apt-get install entr

或者你也可以通过克隆官方来安装 Git 存储库.

git clone https://github.com/eradman/entr.git

接下来,导航到该目录并使用以下命令安装要求。

./configure
make test
make install

要查看可用的构建选项,请运行 ./configure -h

示例示例命令

查看可用于 entr 命令的选项和参数。 使用以下命令。

man entr

此命令显示 entr 命令的用户手册。

NAME
     entr — run arbitrary commands when files change

SYNOPSIS
     entr [-acdnprsz] utility [argument /_ ...]

DESCRIPTION
     A list of files provided on standard input, and the utility is executed using the supplied arguments
     if any of them change.  entr waits for the child process to finish before responding to subsequent
     file system events.  A TTY is also opened before entering the watch loop in order to support interac‐
     tive utilities.

     The arguments are as follows:

     -a      Respond to all events which occur while the utility is running.  Without this option, entr
             consolidates events in order to avoid looping.  This option has no effect in conjunction with
             the -r flag.

     -c      Clear the screen before invoking the utility specified on the command line.  Specify twice to
             erase the scroll back buffer.

     -d      Track the directories of regular files provided as input and exit if a new file is added.
             This option also enables directories to be specified explicitly.  If specified twice, all new
             entries to a directory are recognized, otherwise files with names beginning with ‘.’ are ig‐
             nored.

     -n      Run in non-interactive mode.  In this mode entr does not attempt to read from the TTY or
             change its properties.

     -p      Postpone the first execution of the utility until a file is modified.

 Manual page entr(1) line 1 (press h for help or q to quit)
  • 当工作目录中的任何 JavaScript 文件发生更改时,启动并自动重新加载 MySQL 服务器。 每次将更改保存到文件时,entr 都会重新加载 MySQL 服务器。
 ls *.js | entr -r mysql
  • 自动重新加载 Web 服务器或在服务器退出时终止。
$ ls * | entr -rz ./httpd

有关 entr 命令的更多详细信息和示例,您可以访问他们的官方 GitHub存储库.

  使用 AppSilence 将选择性应用程序置于静默模式 [Jailbreak]

最后的话👩‍💻

我希望您发现这篇文章对于学习如何在给定目录中的任何文件更改以及创建新文件时如何运行 Linux 命令非常有用。

您可能还对学习如何在 Linux 中删除文件和目录感兴趣。