通过使用bash脚本,我试图在运行命令时检测一个文件是否已经在一个目录上创建。
#!/bin/bash
# give base directory to watch file changes
WATCH_DIR=./tmp
# get list of files on that directory
FILES_BEFORE= ls $WATCH_DIR
# actually a command is running here but lets assume I've created a new file there.
echo >$WATCH_DIR/filename
# and I'm getting new list of files.
FILES_AFTER= ls $WATCH_DIR
# detect changes and if any changes has been occurred exit the program.
在那之后,我试着比较这些FILES_BEFORE
和FILES_AFTER
,但是无法完成。
comm -23 <($FILES_AFTER |sort) <($FILES_BEFORE|sort)
diff $FILES_AFTER $FILES_BEFORE > /dev/null 2>&1
cat $FILES_AFTER $FILES_BEFORE | sort | uniq -u
他们都没有给我一个结果,以了解有一个变化或没有。我需要的是检测的变化和退出程序,如果有的话。我不是很擅长这个bash脚本,在互联网上搜索了很多,但找不到我需要的。任何帮助将不胜感激。谢谢。
4条答案
按热度按时间ndasle7k1#
下面是我如何让它工作的。它也被设置成这样,你可以有多个监视目录与相同的脚本与cron。例如,如果你想一个运行每分钟。
* * * * * /usr/local/bin/watchdir.sh /makepdf
每小时一个。
0 * * * * /user/local/bin/watchdir.sh /incoming
fcwjkofz2#
感谢这些信息丰富的评论,我刚刚意识到我错过了bash脚本的基础知识,但最终还是成功了。我将把我的解决方案留在这里,作为对那些像我一样苦苦挣扎的人的答案。
它在第一次运行时输出“更改”,在另一次运行时输出“无更改”,除非您删除新添加的文档。
pftdvrlh3#
我试图将您的脚本(其中包含一些错误)解释为对您的需求的理解。
我认为最简单的方法是将
ls
命令输出重定向到指定的文件,然后将这些文件重定向:如果任何文件被“命令”修改,即文件存在于“之前”列表中,但可能会发生变化,以上将不会显示为差异。
在这种情况下,您最好使用一个“marker”文件来标记监控开始的示例,然后使用
find
命令列出自market文件以来更新/修改过的文件。这不会显示任何被删除的文件,所以也许可以使用混合列表。
mzillmmw4#
在stackexchange中尝试watchdir脚本
你也可以用管道输送。
这将打印每个新文件名或更改的文件名