默認情況下,從inotifywait -e CREATE
輸出的文本形式的
watched_filename CREATE event_filename
其中watched_filename
代表/home/inventory/initcsv
和event_filename
表示新文件的名稱。
所以,在你的地方線while inotifywait -e ...
,放:
DIR=/home/inventory/initcsv
while RES=$(inotifywait -e create $DIR); do
F=${RES#?*CREATE }
,並在您sed
線使用$F
作爲Filein
名。請注意,$(...)
構造是過程替換的posix兼容形式(通常使用反引號完成),${RES#pattern}
結果等於$RES
,並刪除了最短的模式匹配前綴。請注意,該模式的最後一個字符是空白。 [見更新2]
更新1爲了處理在sed的線使用"$F"
代替$F
可能包含空白的文件名。也就是說,在參考值F
周圍使用雙引號。
RES=...
和F=...
定義不需要使用雙引號,但可以使用它們,如果你喜歡的話;例如:F=${RES#?*CREATE }
和F="${RES#?*CREATE }"
在處理包含空格的文件名時都可以正常工作。
更新2正如大安的評論中指出的,inotifywait
有一個--format
參數來控制其輸出的形式。隨着命令
while RES=$(inotifywait -e create $DIR --format %f .)
do echo RES is $RES at `date`; done
在一個終端和指揮
touch a aa; sleep 1; touch aaa;sleep 1; touch aaaa
運行在另一個終端上運行,以下輸出出現在第一終端:
Setting up watches.
Watches established.
RES is a at Tue Dec 31 11:37:20 MST 2013
Setting up watches.
Watches established.
RES is aaa at Tue Dec 31 11:37:21 MST 2013
Setting up watches.
Watches established.
RES is aaaa at Tue Dec 31 11:37:22 MST 2013
Setting up watches.
Watches established.
爲什麼不使用'--format%w'選項輸出,所以只能使用文件名? – Daan
@達安,是的,這是有道理的(%f,而不是%w)。查看更新2 –
'inotifywait -e delete_self aSymlinkFilename'不會工作,如果符號鏈接被刪除,只有當它的真實文件被刪除:(,它也不會工作在破損的符號鏈接:( –