我想同步一个 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
"
测试.sh:
echo test ok
结果:
未知命令“test.sh”。
为什么?我该如何改进?绝对路径也会失败!
如果不可能,我如何在退出时捕获某种状态代码来确定同步是否发生了变化,并在必要时执行命令?
如果我能够得到新的文件已传输。
答案1
lftp 手册指出:
--on-change=CMD 如果发生任何变化则执行命令
但想法是 CMD 是 lftp 命令,而不是 Bash。因此,要执行本地脚本“task.sh”,我们应该使用类似source task.sh
或 的lftp 表达式! 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
"