Я хочу синхронизировать 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 '.Почему и как я могу улучшить это? Абсолютный путь также терпит неудачу!
Если это невозможно, как я могу уловить какой-то код состояния при выходе, чтобы определить, было ли изменение в синхронизации, и выполнить команду в случае?
Также было бы хорошо, если бы я мог просто получить количество новых файлов, переданных.
Руководства для реальных состояний 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
"
Руководства для реальных состояний 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
"
Руководства для реальных состояний 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
"