微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linux FTP把成功输出

我有一个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期望()

试图运行一个bash脚本来源于另一个脚本运行的源代码

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] 举报,一经查实,本站将立刻删除。

相关推荐