我有一个bash脚本,以增量方式(每日)和完整(星期一)创build备份。 每7天,脚本将备份(完整和增量)的一周结合起来,并将它们发送到FTP服务器,我遇到的问题是我想在FTP上载完成后从备份目录中删除文件,但我无法直到我知道该文件已成功上传。 我需要弄清楚如何捕获'226传输完成',所以我可以使用'IF'语句来删除备份文件。 任何帮助是极大的赞赏。 他也是我脚本的FTP部分
if [ -a "$WKBKDIR/weekending-$YEAR-$MONTH-$DAY.tar.gz" ]; then HOST=192.168.40.30 #This is the FTP servers host or IP address. USER=username #This is the FTP user that has access to the server. PASS=password #This is the password for the FTP user. ftp -inv $HOST << EOF user $USER $PASS cd /baks lcd $WKBKDIR put weekending-$YEAR-$MONTH-$DAY.tar.gz bye EOF fi
我可以使用任何意思我需要我想,FTP已经设置了另一个备份function的东西,谢谢
第二编辑艾哈迈德rsync在命令行testing伟大的,它比FTP快很多,服务器在本地networking上,所以SSH没有那么大的一个交易,但很好有增加安全性,我会完成在我的脚本明天,再次感谢
在Linux上找不到Java命令
如何testing一个进程是否在bash中运行grep?
ps:干净的方式只获得父进程?
如何在linux中获得一系列的服务
在system中使用Perl期望()
Linux命令间隔运行脚本
在chef-solo部署bash脚本中检测主机操作系统发行版
使用rsync进行增量备份的脚本
如何获得在bash中的string后的第一个数字
FTP选项
简单的解决办法是做这样的事情:
ftp -inv $HOST >ftp-results-$YEAR-$MONTH-$DAY.out 2>&1 <<-EOF user $USER $PASS cd /baks bin lcd $WKBKDIR put weekending-$YEAR-$MONTH-$DAY.tar.gz bye EOF
你的here-document语法也有问题。 在<<和分隔符之间没有空格(在你的情况下是EOF),我加了一个-因为你在实际分隔符之前加了空白符号(它是作为if / fi代码块的标签),所以[ – ]是需要
现在当你这样做的时候 你可以解析输出文件来寻找文件的成功放置。 例如:
if grep -q '226 transfer complete' ftp-results-$YEAR-$MONTH-$DAY.out; then echo "It seems that FTP transfer completed fine,we can schedule a delete" echo "rm -f $PWD/weekending-$YEAR-$MONTH-$DAY.tar.gz" >> scheduled_cleanup.sh fi
并在给定的时间使用cron运行scheduled_cleanup.sh; 这样,在清理文件之前,你将有一些保证金
如果您的远程FTP服务器具有良好的SITE或PROXY选项,则可以在成功上传后,让远程FTP在上传的文件上运行校验和,并返回结果。
SCP / RSYNC选项
使用FTP是笨重和危险的,你应该尝试看看你是否可以通过scp或ssh访问远程系统。
如果你可以生成一个ssh密钥,如果你没有使用ssh-keygen: ssh-keygen -N "" -t rsa -f ftp-rsa
将ftp-rsa.pub文件放到$ HOST / home / $ USER / .ssh / authorized_keys文件中,上传文件的方法更好:
if scp -B -C weekending-$YEAR-$MONTH-$DAY.tar.gz $USER@$HOST:/baks/ ; then echo Upload successful 1>&2 else echo Upload Failed 1>&2 fi
或者更好的是使用rsync:
if rsync --progress -a weekending-$YEAR-$MONTH-$DAY.tar.gz $HOST:/baks/ ; then echo Upload successful 1>&2 else echo Upload Failed 1>&2 fi
等voilà你完成,因为rsync的作品通过SSH你是快乐和安全的
尝试下一个
#!/bin/bash runifok() { echo "will run this when the transfer is OK"; } if [ -a "$WKBKDIR/weekending-$YEAR-$MONTH-$DAY.tar.gz" ]; then HOST=192.168.40.30 #This is the FTP servers host or IP address. USER=username #This is the FTP user that has access to the server. PASS=password #This is the password for the FTP user. ftp -inv <<EOF | grep -q '226 transfer complete' && runifok user $USER $PASS cd /baks lcd $WKBKDIR put weekending-$YEAR-$MONTH-$DAY.tar.gz bye EOF fi
测试它,什么时候可以正常运行 – 替换你的命令在runifok函数中的回显,在上传成功后执行什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。