【发布时间】:2011-11-16 22:12:34
【问题描述】:
我正在使用此脚本来监视下载文件夹中是否有正在创建的新 .bin 文件。但是,它似乎不起作用。如果我删除 grep,我可以让它复制在 Downloads 文件夹中创建的任何文件,但是使用 grep 它不起作用。我怀疑问题在于我如何尝试比较这两个值,但我真的不确定该怎么做。
#!/bin/sh
downloadDir="$HOME/Downloads/"
mbedDir="/media/mbed"
inotifywait -m --format %f -e create $downloadDir -q | \
while read line; do
if [ $(ls $downloadDir -a1 | grep '[^.].*bin' | head -1) == $line ]; then
cp "$downloadDir/$line" "$mbedDir/$line"
fi
done
【问题讨论】:
-
我不清楚它应该做什么。比较的目的是什么?如所写,它似乎只复制第一个(按字母顺序)包含“bin”的文件(不一定以“bin”结尾,因为 grep 模式未锚定到行尾)。
-
2.事情,1. 总是用 db-quotes 包围未知性质的变量,即
"$line"如果你在$line的值中出现一个可能破坏事物的空格,2. 打开 shell 调试,即set -vx在你的 while 循环之上。然后您将看到每一行/代码块以及分配给每个变量的值。然后很容易看出这些失败的地方。如果您无法弄清楚,请编辑您的帖子以包含相关的调试输出。祝你好运。 -
@GordonDavisson 比较的目的是只移动与某个正则表达式匹配的文件,尽管我确实忘记锚定所说的正则表达式。我看不出如何让 inotify 只移动与模式匹配的东西。