2017-02-23 9 views
2

В osx Я пытаюсь обнаружить, когда новый файл добавлен в папку, а затем выполнить скрипт для обработки этого нового файла. Кажется простым, не так ли?Принятие имени измененного файла в fswatch с xargs в osx

Я делаю это:

fswatch -0 ~/motion-detection | xargs -0 -n1 -I {} ./detectmotion.sh 

который будет вызывать detectmotion.sh сценарий оболочки, который состоит из:

echo "File added: " $1 

на данный момент, по крайней мере. Я просто хочу, чтобы передать имя файла измененного файла в detectmotion.sh

я получаю пустой за $ 1

Может кто-нибудь увидеть, что я делаю неправильно здесь?

Заранее благодарен!

ответ

2

Ожидается, что пустой, потому что вы не передавая аргумент сценария detectmotion.sh который вы получили от xargs. Это должно было

fswatch -0 ~/motion-detection | xargs -0 -n1 -I {} ./detectmotion.sh "{}" 

Помните, что -I {} флага xargs представляет место держателя для значения труб выстроились xargs. Поэтому в вашей попытке как часть вопроса вы просто сохраняете значение в держателе места ({}) и фактически не передаете его сценарию, чтобы сделать его полезным.

Поэтому я изменил команду так, чтобы вы фактически передали полученное значение скрипту, который теперь можно распечатать при доступе к $1 внутри скрипта.

Цитируя man xargs странице -I

-I replace-str 
    Replace occurrences of replace-str in the initial-arguments with names read from 
    standard input. Also, unquoted blanks do not terminate input items; instead the 
    separator is the newline character. Implies -x and -L 1. 

В нашем случае replace-str используется в качестве {}.

+1

Это сработало, спасибо! – Uberbug

+0

@Uberbug: Рад, что вы сочли это полезным. – Inian

Смежные вопросы