lftp запустить файл jar после того, как зеркало изменило файлы?

Я хочу синхронизировать ftp-каталог с lftp и затем запускать файл jar, но только если какие-либо файлы были изменены.

Для тестирования я просто попытался выполнить другой файл bash после синхронизация завершена, но она не работает:

lftp.sh:

lftp -f " open $HOST user $USER $PASS lcd $SOURCEFOLDER mirror --delete --verbose --on-change=test.sh $SOURCEFOLDER $TARGETFOLDER bye "

test.sh:

echo test ok

Результат:

Неизвестная команда `test.sh '.

Почему и как я могу улучшить это? Абсолютный путь также терпит неудачу!

Если это невозможно, как я могу уловить какой-то код состояния при выходе, чтобы определить, было ли изменение в синхронизации, и выполнить команду в случае?

Также было бы хорошо, если бы я мог просто получить количество новых файлов, переданных.

2
задан 1 February 2018 в 03:13

3 ответа

Руководства для реальных состояний lftp:

--on-change = CMD выполнить команду, если что-то было изменено

Но идея в том, что CMD является командой lftp, а не Bash , Поэтому для выполнения локального скрипта «task.sh» мы должны использовать выражение lftp, например source task.sh или ! task.sh.

SCRIPTFOLDER="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
lftp -c " 
open ${HOST}
user ${USER} ${PASS} 
lcd $LOCALTARGETFOLDER
mirror --delete --verbose --on-change='source $SCRIPTFOLDER/test.sh' $REMOTESOURCEFOLDER $LOCALTARGETFOLDER
bye
"
1
ответ дан 22 May 2018 в 19:12
  • 1
    Это работает как шарм, и я рад предоставить вам бонус! – membersound 1 February 2018 в 12:01

Руководства для реальных состояний lftp:

--on-change = CMD выполнить команду, если что-то было изменено

Но идея в том, что CMD является командой lftp, а не Bash , Поэтому для выполнения локального скрипта «task.sh» мы должны использовать выражение lftp, например source task.sh или ! task.sh.

SCRIPTFOLDER="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" lftp -c " open ${HOST} user ${USER} ${PASS} lcd $LOCALTARGETFOLDER mirror --delete --verbose --on-change='source $SCRIPTFOLDER/test.sh' $REMOTESOURCEFOLDER $LOCALTARGETFOLDER bye "
1
ответ дан 18 July 2018 в 08:07

Руководства для реальных состояний lftp:

--on-change = CMD выполнить команду, если что-то было изменено

Но идея в том, что CMD является командой lftp, а не Bash , Поэтому для выполнения локального скрипта «task.sh» мы должны использовать выражение lftp, например source task.sh или ! task.sh.

SCRIPTFOLDER="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" lftp -c " open ${HOST} user ${USER} ${PASS} lcd $LOCALTARGETFOLDER mirror --delete --verbose --on-change='source $SCRIPTFOLDER/test.sh' $REMOTESOURCEFOLDER $LOCALTARGETFOLDER bye "
1
ответ дан 24 July 2018 в 19:00

Другие вопросы по тегам:

Похожие вопросы: