监视文件夹内文件更改的linux脚本(如autospec一样!)

Ian*_*han 17 linux bash automation rspec build

我想在文件发生变化时自动启动构建.

我在Ruby中使用过autospec(RSpec)并喜欢它.

怎么能在bash中完成?

zed*_*xff 5

关键字是inotifywait和inotifywatch命令


Ian*_*han 5

在阅读其他帖子的回复后,我发现了一个帖子(现在已经不见了),我创建了这个脚本: -

#!/bin/bash

sha=0
previous_sha=0

update_sha()
{
    sha=`ls -lR . | sha1sum`
}

build () {
    ## Build/make commands here
    echo
    echo "--> Monitor: Monitoring filesystem... (Press enter to force a build/update)"
}

changed () {
    echo "--> Monitor: Files changed, Building..."
    build
    previous_sha=$sha
}

compare () {
    update_sha
    if [[ $sha != $previous_sha ]] ; then changed; fi
}

run () {
    while true; do

        compare

        read -s -t 1 && (
            echo "--> Monitor: Forced Update..."
            build
        )

    done
}

echo "--> Monitor: Init..."
echo "--> Monitor: Monitoring filesystem... (Press enter to force a build/update)"
run
Run Code Online (Sandbox Code Playgroud)

  • 这是最可怕的解决方案.它将每秒从目录中搜索所有文件,这是一个巨大的性能影响.请查看dennis williamson的解决方案! (9认同)
  • 因为某些东西起作用并不意味着这样做是个好主意.在我看来,你的答案同样微不足道,也存在问题.我认为没有理由删除我的downvote. (4认同)
  • 在发表我的最后一条评论之前,我实际上已经仔细检查过投票的guidlines. (4认同)
  • 请从我的答案中删除你的downvotes,它们是有效的答案和工作,只是因为它们不适合你的使用,它们对我很好,也可能是其他人.因此,downvoting意味着其他人不会尝试这个答案.Downvotes实际上只适用于根本不起作用或不适合主题等的事情.还请编辑你的评论删除单词horrible,它是你的个人选择,欢迎你说它不是性能损失,但保留它在那.干杯. (2认同)

VDR*_*VDR 5

这个脚本怎么样?使用'stat'命令获取文件的访问时间,并在访问时间发生变化时(无论何时访问文件)运行命令.

#!/bin/bash
while true
do
   ATIME=`stat -c %Z /path/to/the/file.txt`
   if [[ "$ATIME" != "$LTIME" ]]
   then
       echo "RUN COMMNAD"
       LTIME=$ATIME
   fi
   sleep 5
done
Run Code Online (Sandbox Code Playgroud)

  • 好吧,我们也可以使用**stat**命令来访问/监控DIR访问时间:**stat -c%Z/var/tmp**脚本会在DIR中添加或删除时触发 (2认同)