监视一组文件的更改并在更改时对其执行命令

2024-04-02

我想到的(命令行)界面如下所示:

watching FILE+ do COMMAND [ARGS] (and COMMAND [ARGS])*

凡出现“{}" in COMMAND替换为已更改的文件的名称。并注意“do" and "and” 是关键字。

例如:

> watching foo.txt bar.txt do scp {} somewhere.com:. and echo moved {} to somewhere

Or:

> watching foo.c do gcc foo.c and ./a.out

但我并不热衷于那个界面。我将添加我的脚本来作为答案,看看是否有人有更好的东西或改进它的方法。


#!/usr/bin/perl
# Run some commands whenever any of a set of files changes (see USAGE below).
# Example:
# ./watching.pl foo.txt bar.txt do scp foo.txt remote.com:. and cat bar.txt
# To only do something to the file that changed, refer to it as {}.

$| = 1;  # autoflush

my $p = position("do", @ARGV); # position of 1st occurrence of "do" in @ARGV.
if (@ARGV < 3 || $p == -1 || !($p >= 1 && $p < $#ARGV)) {
  die "USAGE: watching FILE+ do COMMAND [ARGS] (and COMMAND [ARGS])*\n";
}

my $cmdstr = join(' ', splice(@ARGV, $p+1));  # grab stuff after the "do"
my @cmds = split(/\s+and\s+/, $cmdstr);
pop(@ARGV);  # remove the "do" on the end.
my @targets = @ARGV;
print "Watching {", join(' ', @targets), "} do (", join('; ', @cmds), "):\n";

# initialize the %last hash for last mod time of each file.
for my $t (@targets) {
  ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
   $atime,$mtime,$ctime,$blksize,$blocks) = stat($t);
  $last{$t} = $mtime;
}

my $i = 1;
while(1) {
  if($i % (45*60) == 0) { print "."; }

  for my $t (@targets) {
    ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
     $atime,$mtime,$ctime,$blksize,$blocks) = stat($t);

    if ($mtime != $last{$t}) {
      print "\nCHANGE DETECTED TO $t\n";
      for (@cmds) { my $tmp = $_; $tmp =~ s/\{\}/$t/g; system($tmp); }
      $last{$t} = $mtime;
    }
  }
  sleep(1);
  $i++;
}


# Call like so: position($element, @list).
sub position {
  my $x = shift;
  if(@_==0) { return -1; }
  if($x eq $_[0]) { return 0; }
  shift;
  my $p = position($x,@_);
  if($p==-1) { return -1; }
  return 1+$p;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

监视一组文件的更改并在更改时对其执行命令 的相关文章

  • 从 python 执行 C++ 代码

    我是 python 的初学者 我不知道这是否可行 我在 python 中有一个简单的循环 它为我提供当前目录中的所有文件 我想要做的是从 python 执行我之前在目录中的所有这些文件上编写的 C 代码 建议的 python 循环应该是这样
  • 用 C 更快地读取文件

    嗯 我想知道是否有一种比使用 fscanf 更快地读取文件的方法 例如假设我有这个文本 4 55 k 52 o 24 l 523 i 首先 我想读取第一个数字 它给出了接下来的行数 令这个数称为N N 之后 我想读取 N 行 其中有一个整数
  • 如何从 Linux 命令行获取视频文件的分辨率(宽度和高度)?

    我一直在挖掘 mplayer mencoder 和 ffmpeg 文档 但我似乎无法想出anything 我对输出格式不是特别挑剔 因为我可以使用正则表达式将其拉出来 我只是似乎无法首先获取数据 Use ffprobe https ffmp
  • FileReader 在 Ionic 2 中未触发 onloadend

    我正在尝试使用 cordova file plugin 读取本地文件 目前我可以读取本地目录的内容并选择单个文件 但我在获取文件内容时遇到问题 这是我的函数 从列表中选择文件后单击按钮即可调用该函数 import window resolv
  • 如何从linux命令行运行.exe可执行文件? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 Windows 中有一个 abc exe 可执行文件 我可以使用 DOS 命令提示来执行此应用程序 并为其提供一些运行时变量 我想从
  • 如何在 Windows 7 中使用 Python 廉价地创建非常大的文件? [复制]

    这个问题在这里已经有答案了 可能的重复 在Windows系统上快速创建大文件 https stackoverflow com questions 982659 quickly create large file on a windows s
  • touch命令在一个目录下创建多个文件(不同名称)

    我想制作一个在 bash 中创建目录和文件结构的脚本 我尝试过这样的事情 mkdir p 1 2 touch 1 2 a b c a b c 应该是在一个命令或其他命令中创建的文件 但由于某种原因 结构是这样的 current folder
  • 在 C# 中打开文本文件

    我正在编写一个 Windows 窗体应用程序 其中在程序运行时记录一些数据 并使用以下代码将其写入临时文件中 string path Path GetTempFileName byte text new UTF8Encoding true
  • PHP将数据写入文件中间而不重写文件的最佳方法是什么

    我正在 php 1GB 中处理大型文本文件 我正在使用 file get contents file txt NULL NULL 100000000 100 要从文件中间获取数据 但如果我想将文件中的数据更改为与原始数据不同的更改 我将不得
  • 从文件中读取未知长度的int数组

    如何从文件中读取未知长度的整数数组 我没有找到获取数组大小的方法 所以我尝试了一些临时字符串的东西 但我的代码爆炸了 有更好的想法吗 Use std vector std ifstream inFile fileName std vecto
  • 如何使用 PHP 查找目录中的前 5 个文件?

    如何使用 PHP 列出按字母顺序排序的目录中的前 5 个文件或目录 Using scandir array slice array filter scandir path to dir is file 0 5 The array filte
  • 仅当重复行与模式匹配时才删除它们

    这个问题 https stackoverflow com questions 1444406 how can i delete duplicate lines in a file in unix有一个很好的答案说你可以使用awk seen
  • 从 bash 从新的 Google Chrome 浏览器会话获取“用户代理”字符串

    我想要得到用户代理 HTTP 请求标头 https developer mozilla org en US docs Web HTTP Headers User Agent来自 bash 的新 Google Chrome 浏览器会话 刚刚打
  • 将 Dropzone.js 与其他表单字段集成到 html 表单中

    我想将 dropzone js 添加到具有其他元素的表单中 我找到了这个示例并按照说明进行操作 不幸的是整个变成了 dropzone js dropzone https github com enyo dropzone wiki Combi
  • 将 Powershell 输出转换为 Markdown 文件

    我有以下代码 xmlFile C Users kraer Desktop bom xml xml xml Get Content xmlFile xml bom components component ForEach Object fin
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • 对目录中的所有文件执行命令

    有人可以提供执行以下操作的代码 假设有一个文件目录 所有这些文件都需要通过程序运行 该程序将结果输出到标准输出 我需要一个脚本 该脚本将进入一个目录 对每个文件执行命令 并将输出连接到一个大输出文件中 例如 要在 1 个文件上运行命令 cm
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • 使用正则表达式模式查找 -name 并使用 cp 替换文件名

    目前我正在使用该命令cron复制 data从源到目标路径 find source path name data exec cp target path 源码结构为 source path category1 001 data source
  • 如何删除文件

    我们有一个脚本 scripts ourscript php和一个文件 media movie1 flv 当我们运行时 我们如何删除这个文件ourscript php Using unlink http php net manual en f

随机推荐

  • 如何合并两个数据框?

    我有一个初始数据框D 我从中提取两个数据帧 如下所示 A D D label k B D D label k 我想结合A and B到一个数据帧中 数据的顺序并不重要 然而 当我们采样时A and B from D 他们保留索引D 已弃用
  • 迭代 python 列表的最佳方法是什么,排除某些值并打印结果

    我是 python 新手 有一个问题 我检查过类似的问题 检查了教程深入Python 检查了 python 文档 googlebinging 类似的 Stack Overflow 问题和十几个其他教程 我有一段 Python 代码 用于读取
  • 创建 GSON 对象

    如何使用 Google Gson 创建 json 对象 以下代码创建一个 json 对象 如下所示 name john JsonObject jsonObject new JsonObject jsonObject addProperty
  • Varnish hit-for-pass 是什么意思?

    Varnish 版本 3 有一些用于不同操作的对象 例如 当它必须从后端检索数据时使用pass 当它在缓存中找到请求内容时使用hit 但我无法理解 hit for pass 的用法 Varnish什么时候使用它 我在网上没有找到任何有用的材
  • 当文件被删除并再次创建时,inotify 停止监视文件

    我在使用inotify时遇到一些问题 我使用 inotify 来监视文件的更改 这是我的代码 int fd inotify init int wd inotify add watch fd root temp IN ALL EVENTS i
  • 用于将 XML 内容解析为类的 LINQ 查询

    我有一个 xml 我试图通过 LINQ 查询从中提取一些信息 xml 文件的格式如下所示
  • 如何使用 pandas 中的自定义权重计算滚动平均值?

    熊猫文档http pandas pydata org pandas docs stable computation html http pandas pydata org pandas docs stable computation htm
  • 如何使用 .gitignore 忽略文件夹中的所有子文件夹

    我在 Git 中有一个文件夹 里面有一些文件 文件是我的 Git 存储库的一部分 运行我的项目时 一些工作目录会出现在该文件夹中 目录可以具有任何名称和任何具有多个子目录的嵌套级别 我想忽略此文件夹中出现的所有可能的子目录 但仍将所有文件
  • 如果密钥不存在,如何插入到 DynamoDb

    我想将 id 一些值添加到 DynamoDb 一次 如果 id 已经存在 则不执行任何操作或更新 我可以和 search if not found gt insert if found gt do nothing or update for
  • STL 迭代器对结束(过去的结束)迭代器重新验证?

    请参阅有关尾后迭代器失效的相关问题 this https stackoverflow com questions 11350454 past the end iterator invalidation in c11 this https s
  • 根据区域设置的数字格式(逗号分隔)

    我需要显示一个数值 例如123456789 905采用以下格式123 456 789 90 但逗号分隔会根据手机中选择的区域设置而变化 就好像美国英语选择的逗号分隔是 3 个位置 如果选择印度英语 则就像12 34 56 789 90 我怎
  • 我可以删除 jQuery UI 选项卡的整个样式而不破坏其他 UI 组件的样式吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想完全自定义 jQuery UI 选项卡而不破坏 jQuery UI 日期选择器的样式 这是可行的还是我应该进行自定义工作而不使用
  • 我可以在自定义域中使用通配符子域吗?

    只是检查一下是否有人知道这是否可能 我想在 firebase 托管中使用通配符子域 并使用函数来解析子域 不可以 Firebase Hosting 目前不支持通配符子域 这是我们将来想做的事情 但目前没有时间表或具体计划可以分享
  • React 流程图库 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要一个流程图库 它可以帮助我在 React 中创建如下所示的流程图 如果添加类似演示的链接 我将非常
  • 由于空对象引用,无法将新对象添加到 RealmList

    我必须领域对象 一个是带有两个字符串和一个布尔值的基本 RealmObject 另一个只是该对象的 RealmList 以便于访问 当我尝试从 ContactBook 实例获取列表并添加新对象时 我尝试在空对象引用上调用虚拟方法 但是 我能
  • 无法绑定到“for”,因为它不是已知的本机属性 angular2

    我必须动态创建一个复选框列表 因此我使用 ngFor 来迭代对象数组 直到迭代为止一切正常 当我设置值时出现问题forlabel标签中的属性 角度抛出错误 无法绑定到 for 因为它不是已知的本机属性 angular2 新的错误消息 未处理
  • Java 8 lambda 表达式与只有一个方法的抽象类[重复]

    这个问题在这里已经有答案了 我正在学习 Java 8 中的 lambda 表达式 有人可以向我解释如何将 lambda 表达式与只有一种方法的抽象类一起使用 如果可能的话 例如 这是抽象类 public abstract class Cla
  • 在构建服务器上运行 UI 自动化测试

    我们使用 UI Automation 和 Nunit 为 WPF 应用程序创建测试 UI 测试 我们创建的测试在您从本地计算机运行时可以正常工作 这些测试从未在我们的构建服务器 使用 TeamCity 上成功运行 打开应用程序窗口后 构建始
  • CKEditor editor1.insertHtml() 不适合我

    我正在使用 CKEditor 来编辑帖子的评论 我也在使用 JQuery 因为每个帖子可能有多个评论 所以我试图将其全部基于班级 下面的函数应该隐藏注释的显示区域 将显示区域中的文本插入到编辑器中 最后显示编辑器 function fnCo
  • 监视一组文件的更改并在更改时对其执行命令

    我想到的 命令行 界面如下所示 watching FILE do COMMAND ARGS and COMMAND ARGS 凡出现 in COMMAND替换为已更改的文件的名称 并注意 do and and 是关键字 例如 gt watc