2016-02-14 25 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' - просто запустите его без вашего 'while read ...' –

ответ

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