2014-10-16 57 views
1

我想监视一个目录+子目录并获取在文件夹或子文件夹中创建的文件的前7个字符。我使用这些代码对我的问题:监控创建文件的目录和子目录,并获取创建的文件的前7个字符?

inotifywait -mqr /path/ -e create | 
    while read path file ; do 
    line=$(head -c 7 $file) ; 
    echo $line ; 
    done; 

但是当我运行的代码只成功地为一些文本文件(第7个字符=“setruk”),而不是打印一些anythings它不会打印文本文件(前7个字符=“kukuryu”)。谁能帮我 ?拜托?

+0

也许引用你的变量?如果文件名包含空格,则代码将不起作用。 – Barmar 2014-10-16 15:31:38

+0

我已经使用报价,但它仍然无法正常工作。 – 2014-10-16 15:51:42

+0

我看不到任何其他代码问题。在开始处添加'set -x'来查看执行轨迹。 – Barmar 2014-10-16 15:54:15

回答

0

对于我来说,这是inotifywait输出:

$ inotifywait -mqr . -e create 
./test/ CREATE five 
./test/ CREATE six 
./test/ CREATE seven 

,如果你得到了CREATE一部分,我不知道,但你可能缺少目录路径。你可能会想:

inotifywait -mqr /path/ -e create | 
    while read path action file ; do 
    line=$(head -c 7 "$path$file") ; 
    echo $line ; 
    done; 

如果你没有在该行的CREATE部分,只是改变head命令,包括文件名的$path部分:

line=$(head -c 7 "$path$file") ; 

什么是可能发生的是,子目录中的文件没有得到他们的字符打印,但主目录中的文件是。

+0

我已经包含$ path部分,它不会更改 – 2014-10-17 02:00:13

+0

Arya,您可以使用您当前的代码更新您的文章吗?当你不把它传送到'while循环时,请包括'inotifywait'命令的输出。此外,请尝试测试一个只回显路径和文件名并发布输出的while循环。 – zerodiff 2014-10-17 13:44:59