linux下本地文件与远端FTP同步的脚本实现

目的:
1.希望当本地硬盘的某些特定目录中生成了新的特定格式的文件,且该文件的大小已经一段时间没有变化,
则上传到某FTP上的某目录。希望同时同步这样几个目录,不是仅同步一个目录。
文件一般是视频格式

2.同样,当另外某FTP上特定目录中生成了新的特定格式的文件,且该文件的大小已经一段时间没有变化,则下载到本地某目录。

FTP1》》》》本地》》》》》FTP2

也就是本地和FTP2都与FTP1同步

但FTP1和FTP2之间可以考虑用FXP也就是

FTP1》》》》本地

FTP1---------本地------------FTP2
》》》》》》》》》》》》》》》

但上面两者会发生冲突因为该FTP可能只允许单线程,FTP1发生变化时,应当先同步本地,再同步FTP2

解决方案



最近参考了一些网络上的脚本,初步编写了一个简单的从本地文件上传同步的SHELL脚本(本人水平有限见笑了),也就是该同步只使用上传命令,
复制内容到剪贴板
代码:
#timestamp=".timestamp"
tempfile="/tmp/ftpsyncup.$$"


user="username"
server="serverip"
RDB="/TEST/ANIME/"
RD[1]="[Darker than BLACK][黑色契约者]"
RD[2]="POLYPHONICA_神曲奏界"
RD[3]="CLAYMORE_大剑"
LDB="/var/ftp/comic/TV动画/连载中动画/"
LD[1]="[Darker than BLACK][黑色契约者]"
LD[2]="POLYPHONICA_神曲奏界"
LD[3]="Claymore_大剑"
count=0
timeouter=0


trap "/bin/rm -f $tempfile" 0 1 15      # zap tempfile on exit &sigs


      cd "$LDB"                                #change to local home directory
echo "open $server" > $tempfile
echo "user $user password" >> $tempfile
echo "cd $RDB" >> $tempfile

for ((i=1;i<=1;i++));do
   
       lcd ${LD[i]}
   "cd  ${RD[i]}" >>$tempfile

       for filename in  *.rmvb
       do
        if [ -f "$filename" ] ; then
         echo "put -c  \"$filename\"" >> $tempfile
         count=$(( $count + 1 ))
        fi
       done
   

done


echo "quit" >> $tempfile

echo "Synchronizing: Found $count files in local folder to upload."

if  lftp < $tempfile ; then
  echo "Done. All files synchronized up with $server"
fi

exit 0
但如果用脚本让远端服务器和本地服务器 下载 同步却不太好实现,如果只是使用SHELL脚本的化,因为要在远端服务器执行判断,例如大小,时间,单纯使用 SHELL脚本+LFTP不易实现,例如最基本的文件的时间比较,在SHELL脚本中获取远端FTP的文件时间就不行,所以我转而研究 FTP脚本,也就是FTP软件自带的脚本,LFTP 好象 在这方面没有什么内容,支持的脚本不太强大,而无意中在网络上发现了一个叫 C-kermit /kermit 95的软件,貌似对脚本支持很强大,而且也有前人已经写好的同步脚本,


大家还知道有什么命令行下的FTP软件对脚本支持比较好呢
或者有一些 此类的FTP同步专用软件(命令行下)