问题标签 [inotifywait]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bash - 使用 inotify 和命令行工具监视和搜索文件
日志文件由水下无人机在服务器上逐行写入。T在水面时,无人机与服务器的通话速度很慢(比如在不稳定的电话线上约 200o/s),并且只是偶尔(比如每 6 小时一次)。根据消息,当无人机在线以及挂断其他命令时,我必须在服务器上执行命令。其他进程可能正在查看具有相似任务的相同文件。
在这个网站上可以找到很多类似的问题,但我建立的解决方案仍然不能令人满意。目前我正在用 bash 做这个
主要问题是:
第二个 inotify 未命中行,可能是因为其他进程正在查看同一文件。
我赶时间的方式似乎不起作用。
我无法同时监控 2 架无人机。
基本上代码或多或少地工作,但不是很健壮。我想知道问题 3 是否可以通过将第二个 while 循环放在调用时置于后台的函数中来管理。最后,我想知道高级语言(我熟悉 php,它具有用于 inotify 的 PECL 扩展)是否会做得更好。但是,我认为 php 不会比 bash 更好地解决问题 3。
这是我面临从while循环突然退出问题的代码,根据Philippe's
答案实现,否则效果很好:
当我用 ssh 注释该行时,脚本可以通过 CLOSE 触发的中断正确退出,否则while loop
在 ssh 命令后突然结束。ssh 被置于后台,因为 matlab 代码运行时间长。
inotifywait - inotifywait 不将输出通过管道传输到控制台
我有以下运行 inotifywait 命令的 shell 脚本。我想在每次修改事件时将输出回显打印到控制台。
剧本:
当我更改指定目录中的一个文件时,我从 inotifywait 获得标准输出:
我有两个问题:
为什么修改的事件注册了两次?我只更新了一次文件。为什么“测试”没有打印到我正在运行脚本的控制台?
bash - 使用 inotifywait 更改文件名并进一步循环通过 sql loader
目标:当多个.csv文件上传到文件夹时,代码应该检查每个文件名,如果文件名合适,sqlloader应该进一步使用文件来获取上传到数据库中的数据。上传文件后,代码应删除已处理的文件。下一次,同样的过程重复。
我有一些代码工作,但有些正在产生问题,特别是与 inotifywait 相关。请帮忙。
在第一个循环中,我试图监视 /uploads 文件夹,当它找到 .csv 文件时,它会检查文件名是否有空间。如果是,它想将空间更改为文件名中的下划线。我一直在尝试找到一种在文件名中找到“空格、() 或”的方法,但只能更改“空格”部分。这给了我一个错误,即文件无法移动,没有这样的文件或目录。
第二个循环单独工作,但在与第一个循环合并时不工作,因为存在我无法调试的错误。如果我单独运行第二个循环,它工作正常。但是,如果有一种方法可以在一个循环中更好地优化代码,我会很高兴知道。谢谢!
示例:文件夹名称:/../../upload
文件名:abc_123.csv(代码不应进行任何更改)、pqr(12 Apr).csv(代码应将其更改为 pqr_12_Apr.csv)、May 12.csv(代码应将其更改为 May_12.csv)等。一旦这些3个文件有适当的命名,应该可以通过sql loader上传,一旦文件被处理,它们就会被删除。
我的代码是:
谢谢!
bash - `inotifywait` 不会在带有 `-e delete_self` 的 bash 脚本中终止;但在交互式外壳中
我正在尝试编写一个脚本,该脚本在删除python3 -m http.server
某个目录(_site
)然后重新创建时重新启动进程。脚本如下。该函数中有一个 inotify 命令,waitdel
它应该只阻塞直到目录被删除。当它被删除时,执行会继续进行一个简单的轮询等待,直到创建目录,然后服务器重新启动,最后我们又回到等待状态。
问题是,当_site
被删除时, shell 脚本中永远不会退出,即使当我在运行此脚本的同一 bash 提示符下运行inotifywait
完全相同的命令时也会退出,无论是 on还是.DELETE
DELETE_SELF
我已经验证inotifywait
运行了正确的命令,并且服务器进程没有阻止脚本的执行。那么,为什么它没有在脚本中退出?
bash - inotifywait 不显示正确的路径
我有一个脚本可以自动将电影数据添加到我的网站,并通过使用 inotify 启动其他脚本为它们下载正确的字幕。所以它只在新文件上运行我需要完整的文件路径,如“ /var/www/html/movies/my movie (2020)/
”和文件名“ my movie (2020).mp4
”
我尝试了不同的方法来让它工作,例如:
上面没有拾取任何文件。
适用于“Freaks (2018)”等电影,但不适用于“Zombieland Double Tap (2019)”,它变成“ZombielandTap (2019)”
完全没有 --format 只会完全弄乱一些目录:2 fast 2 furious (2003) 变成:
我对它的确切需求是获取路径和文件名(我分别使用两者)。在不受监控的文件夹中下载完成后,电影将被移动并从任何种子名称重命名为受监控目录中的实际名称。最终文件是我关心的所有链接。
我可以做些什么来分别获取路径和文件名,以便我可以在需要时将它们添加在一起(首选)或完整路径我可以用表达式分解?
linux - 检查文件是否已更改以及文件中的哪一行
我正在寻找一些解决方案来帮助我跟踪对文件所做的任何更改。我在 Linux 系统上工作,很多人都可以访问相同的文件。有时会发生,有人更改了文件中的某些内容并且不通知其他用户。所以我想编写一些脚本来检查提供的文件路径或文件是否已更改,如果是,则写入文件让我们说“controlfile_File1.txt”类似“文件更改%date,第 XXX 行”。我知道我可以为此使用 md5checksum,但是如果文件更改,我只会获得信息,但我想知道哪一行被更改。我还考虑将这个文件复制到某个地方并在复制的文件和当前文件之间进行一些差异的解决方案?
有任何想法吗?谢谢你的支持。
bash - 无法弄清楚 inotifywait 排除是如何工作的,有人可以解释一下吗?
我在 bash 中有以下代码和平
我不知道如何从名为“logs.txt”和“.git”文件夹的监视文件中排除,任何人都可以解释排除在 inotifywait 中的工作原理吗?
ps logs.txt 和 .git 文件夹,可能在任何位置,我不知道具体在哪里
python - 观察模块 /sys/module/uvcvideo/refcnt 的变化(触发网络摄像头使用的动作)
当我的网络摄像头打开时,我想在我的在家工作的办公室切换一个 On Air 标志。
可以通过以下方式轻松检测网络摄像头是否打开
如果它输出 0,则没有应用程序正在使用网络摄像头,否则是。
我已经有一个 Wifi 插头,可以使用 HTTP GET 请求进行切换。
我唯一的问题是:我是否必须定期轮询上述命令的输出,或者我是否可以从内核的一些 Bash、Python 或 PHP 脚本中获得通知?
这个想法是不通过轮询产生不必要的系统负载 - 或者那不重要吗?
我已经尝试过inotifywait
了,但似乎没有注意到上述伪文件的变化。
linux - 将文件夹添加到监视目录时不会触发 inotifywait close_write
我正在尝试复制保存到 torrent 保存文件夹的已完成文件。我使用 inotifywait 创建了一个 bash 脚本来监视该文件夹。我的原始脚本非常适合文件和文件夹/子文件夹。一旦我用“-e close_write”替换了“-e create -emoved_to”,它就不再识别保存在监视文件夹中的文件夹。它现在仅适用于文件。我需要更改为这个的原因是因为我的很多文件都很大(并且文件夹中的多个文件)并且需要一些时间才能完全保存并且脚本在完成之前运行所有进程。
我也尝试过“等待”命令,但它什么也没做。我知道有更复杂/更好/正确的使用方法,但我还没有弄清楚。
这是我的脚本示例。任何指导将不胜感激。我不擅长编写 bash 脚本,如果写得一团糟,我很抱歉。
谢谢,肖恩
编辑...
我一生都无法获得此脚本,甚至无法看到添加到监视文件夹中的新文件夹。它实际上什么也没做。如果我close_write
用create
&替换moved_to
它并且不做其他更改,它会正确地看到文件夹和内容并处理。我觉得这很奇怪。
事实上,我什至尝试制作一个小的测试脚本,看看我是否可以让它与 if/elif/else 语句一起工作,但是当我再次在监视文件夹中复制一个文件夹时,脚本什么也不做(甚至不做到循环)。如果我放入一个文件,那么它会提供正确的输出。
这是我运行的测试脚本。其他人可以确认他们是否可以正确识别和处理新文件夹吗?
linux - (usb)设备检测上的输出挂载点
我想创建一个 bash 脚本,它将从插入的 USB 设备输出挂载点。我有两个命令(在“do”和“done”之间)单独工作,但不能在 bash 脚本中一起工作。脚本查找 UUID 文件,使用 lsblk 命令中的 $UUID 文件名来提取挂载点 挂载点必须放在一个变量中,这样我就可以在同一个 bash 脚本中继续使用它。到目前为止,我已经有了这个:
echo 新设备可以工作并且可以看到 $UUID 但 lsblk 命令什么也不做。将命令lsblk --noheadings --output MOUNTPOINT /dev/disk/by-uuid/**realuuid**
放入终端时,它可以工作。有谁知道出了什么问题?