2016-02-14 30 views
0

我使用fswatch在文件更改時採取一些操作。我用下面的命令:如何打印導致fswatch做某事的文件路徑

fswatch -o -r '.' | while read MODFILE 
do 
    echo 'Some file changed, so take some action' 
done 

這工作得很好,如果我改變了幾個文件,我看到在終端如下:

Some file changed, so take some action 
Some file changed, so take some action 
Some file changed, so take some action 
etc. 

但我也想知道哪個文件造成的實際行動。所以,我檢查了fswatch手冊,它顯示以下內容:

fswatch writes a record for each event it receives containing: 
    -  The timestamp when the event was received (optionally). 
    -  The path affected by the current event. 
    -  A space-separated list of event types (see EVENT TYPES). 

但正如我說沒有看到我的終端上市的事情。有誰知道我能如何顯示「受當前事件影響的路徑。」「?

所有的技巧都歡迎!

+0

嘗試'fswatch -xn。 ' –

+0

@MarkSetchell - 感謝您的建議,但不幸的是仍然沒有結果.. – kramer65

+0

在El Capitan上用'fswatch 1.8.0'正常工作 - 只是在沒有您的情況下運行它'而讀...' –

回答

2

當然,使用此:

fswatch --batch-marker=EOF -xn . | while read file event; do 
    echo $file $event 
    if [ $file = "EOF" ]; then 
     echo TRIGGER 
    fi 
done 

如果你想受影響的文件名保存在列表中,你可以做這樣的:

#!/bin/bash 
fswatch --batch-marker=EOF -xn . | while read file event; do 
    if [ $file = "EOF" ]; then 
     echo TRIGGER 
     echo Files: "${list[@]}" 
     list=() 
    else 
     echo $file $event 
     list+=($file) 
    fi 
done 
+0

但是使用這段代碼,如果所有文件都不止一個(對我來說通常是這種情況),它會採取更改所有文件的操作。我實際需要的是代碼首先列出所有已更改的文件,然後僅執行一次操作。這也是可能的嗎? – kramer65

+0

您可以使用'fswatch --batch-marker = EOF'添加批處理標記,然後您將在批處理結束時獲得所有文件和'EOF',您可以使用它來觸發處理。 –

+0

太好了,謝謝! – kramer65

相關問題