如何从 inotifywait 事件中获取文件名?

如何从 inotifywait 事件中获取文件名?

因此我做了一个简单的inotifywait循环来监视 Bootstrap 目录中的变化:

while inotifywait -r -q --format %w bootstrap/; do
    echo "something happened"
    [[ $filename == *.js ]] && uglifyjs .....
    [[ $filename == *.less ]] && lessc bootstrap.less
done

您实际上并不需要担心内部结构,但我就是无法将文件名放回到 bash 范围。inotifywait回显文件名(借助格式参数)但我如何捕获它并在以后使用它(在我的情况下为$filename)?


如果您想要一个简单、简短的测试工具:

touch testfile
while inotifywait testfile do; echo "..."; done

然后,touch testfile当您想要触发它时,您只需运行它即可。

答案1

更清洁的方式如下图所示这篇博文

inotifywait -m -r -q --format '%w' bootstrap/ | while read FILE
do
  echo "something happened on path $FILE"
done

答案2

事实证明我只需要重组while以便捕获输出inotifywait

while true; do
    echo "something happened"
    filename=$(inotifywait -r -q --format %w bootstrap/)
    [[ $filename == *.js ]] && uglifyjs .....
    [[ $filename == *.less ]] && lessc bootstrap.less
done

我仍然很好奇是否有更清洁的方法来做到这一点。

相关内容