我正在寻找编写一个小的bash脚本,以便在启动时监视任何新创建文件的目录。如果出现新文件,我希望它的存在触发第二个脚本运行。
我看到它被用来触发压缩最近数字化的视频,并将其添加到摄取素材的日志中。
目前,我的代码如下所示:
#!/bin/sh
##VIDSTAT is a global variable coming from a parent script.
##proj is the ingestion directory coming from a parent script
proj=$1
dir="/home/$USER/data/movies/$proj"
dirlist=$(ls $dir)
while { $VIDSTAT -eq 1 }:
do
for mov in $dirlist
do
if [ "$(( $(date +"%s") - $(stat -c "%Y" $mov) ))" -lt "5" ]
then
~/bin/compressNlog.sh $mov
fi
done
done
有没有更简单/更清洁/更少内存的方式来做到这一点?
编辑 我将在每个捕获会话中更改提取目录。我已经相应地调整了代码
Incron 怎么样?它在文件/目录更改时触发命令。
sudo apt-get install incron
例:
<path> <mask> <command>
在哪里<path>
可以查看目录(意味着监视目录和/或直接在该目录中的文件(不是监视该目录的子目录中的文件!))或文件。
<mask>
可以是以下之一:
IN_ACCESS File was accessed (read) (*)
IN_ATTRIB Metadata changed (permissions, timestamps, extended attributes, etc.) (*)
IN_CLOSE_WRITE File opened for writing was closed (*)
IN_CLOSE_NOWRITE File not opened for writing was closed (*)
IN_CREATE File/directory created in watched directory (*)
IN_DELETE File/directory deleted from watched directory (*)
IN_DELETE_SELF Watched file/directory was itself deleted
IN_MODIFY File was modified (*)
IN_MOVE_SELF Watched file/directory was itself moved
IN_MOVED_FROM File moved out of watched directory (*)
IN_MOVED_TO File moved into watched directory (*)
IN_OPEN File was opened (*)
<command>
是事件发生时应运行的命令。在命令规范中可以使用以下通配符:
$$ dollar sign
$@ watched filesystem path (see above)
$# event-related file name
$% event flags (textually)
$& event flags (numerically)
如果查看目录,则$ @保留目录路径,$#保留触发事件的文件。如果您观看文件,则$ @拥有文件的完整路径,而$#为空。
工作示例:
$sudo echo spatel > /etc/incron.allow
$sudo echo root > /etc/incron.allow
启动守护程序:
$sudo /etc/init.d/incrond start
编辑incrontab
档案
$incrontab -e
/home/spatel IN_CLOSE_WRITE touch /tmp/incrontest-$#
测试一下
$touch /home/spatel/alpha
结果:
$ls -l /tmp/*alpha*
-rw-r--r-- 1 spatel spatel 0 Feb 4 12:32 /tmp/incrontest-alpha
注意: 在Ubuntu
启动时需要激活inotify。请在Grub menu.lst文件中添加以下行:
kernel /boot/vmlinuz-2.6.26-1-686 root=/dev/sda1 ro inotify=yes
问题内容: 有客观的更好的方法在bash脚本中创建临时文件吗? 我通常只要给他们起名就可以使用它们,例如tempfile-123,因为脚本结束后它将被删除。除了覆盖当前文件夹中可能的tempfile-123之外,这样做是否有其他缺点?还是以更谨慎的方式创建临时文件有什么好处? 问题答案: 该手册页解释了它相当好: 传统上,许多shell脚本使用pid作为后缀来命名程序名称,并将其用作临时文件名。这
我试图从一个简单的BASH脚本执行一个简单的PHP脚本。这个网站上的答案不能回答我的问题。 这是我的BASH脚本 这是我的PHP脚本 从命令行运行BASH脚本时,出现以下错误。 我试过键入/usr/bin/php-q/home/username/subfolder/durable2。这很好。它跑起来了
问题内容: 假设我在网址“ http://mywebsite.com/myscript.txt”处有一个包含脚本的文件: 而且我想先运行该脚本而不先将其保存到文件中。我该怎么做呢? 现在,我已经看到了语法: 但这似乎不像我保存到文件然后执行时那样。例如,readline不起作用,而输出仅为: 同样,我尝试过: 具有相同的结果。 最初我有一个解决方案,例如: 但这似乎草率,我想要一个更优雅的解决方案
问题内容: 我试图找出一种从Golang执行脚本(.sh)文件的方法。我发现了几种简单的执行命令的方法(例如os / exec),但是我要执行的是执行整个sh文件(该文件设置了变量等)。 为此,使用标准的os / exec方法似乎并不简单:尝试输入“ ./script.sh”并将脚本内容加载到字符串中都不能用作exec函数的参数。 例如,这是我要从Go执行的sh文件: 从Go程序中: 其中mong
问题内容: 我使用的测试脚本包含很多命令,并且会生成大量输出,我使用或和,所以脚本会在发生错误时停止。但是,我仍然很难定位执行停止在哪一行以定位问题。有没有一种方法可以在执行每行之前输出脚本的行号?还是输出命令产生之前的行号?否则任何可以解决我的脚本行位置问题的方法都将提供很大的帮助。谢谢。 问题答案: 您提到您已经在使用。该变量表示值是设置选项时在回显命令行之前打印的提示,默认情况下为空格。 您
问题内容: 在系统调用中,如果使用打开,系统调用将确保仅在文件不存在时才创建该文件。系统调用保证原子性。有没有类似的方法可以通过bash脚本以原子方式创建文件? 更新:我发现了两种不同的原子方式 使用set -o noclobber。然后,您可以原子地使用>运算符。 只需使用mkdir。Mkdir是原子的 问题答案: 100%纯bash解决方案: 如果不存在名为的文件,则此命令将创建一个名为的文件