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

Oli*_*Oli 6 command-line scripts inotify

所以我正在做一个简单的inotifywait循环来观察 Bootstrap 目录中的变化:

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

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


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

touch testfile
while inotifywait testfile do; echo "..."; done
Run Code Online (Sandbox Code Playgroud)

然后你可以touch testfile在你想触发它时运行。

abe*_*ier 21

此博客条目说明了更清洁的方法:

inotifywait -m -r -q --format '%w' bootstrap/ | while read FILE
do
  echo "something happened on path $FILE"
done
Run Code Online (Sandbox Code Playgroud)

  • 格式可能需要是 '%f' 而不是 '%w' 来获取文件名 (7认同)
  • 并获得路径+文件名 --format '%w%f',这是一个可用的路径:') (2认同)