2014-10-16 53 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