linux脚本中使用ftp,在shell脚本中使用ftp的方法分享

有时,我们需要通过ftp传送文件到另一台机器。通常情况下,可以通过交互式的命令行来完成,但对于数据量较多的情况来讲,这样的操作会很烦琐。

此时,可以写一段shell脚本,实现ftp文件的自动传输即可。

可能的问题

在shell脚本中用FTP传输文件,会要求输入密码才可能操作ftp服务器。

典型的FTP客户端程序在Unix,Linux,Solaris和NetBSD系统中,会从/dev/tty终端接收FTP密码。

来看一个例子,用于演示:

复制代码 代码示例:

#!/bin/sh

HOST='ftp.users.jquerycn.cn'

USER='yourid'

PASSWD='yourpw'

FILE='file.txt'

ftp $HOST <

user $USER

$PASSWD

put $FILE

quit

END_SCRIPT

exit 0

以上脚本只是挂在前台(在xterm)运行,或在后台运行(以cron作业运行),它未能实现file.txt的转移工作。

实际应用中的例子:

复制代码 代码示例:

#!/bin/sh

HOST='ftp.users.jquerycn.cn'

USER='yourid'

PASSWD='yourpw'

FILE='file.txt'

ftp -n $HOST <

quote USER $USER

quote PASS $PASSWD

put $FILE

quit

END_SCRIPT

exit 0

技巧

ftp客户端程序,获取FTP服务器的密码,而无需读取密码从/dev/tty的需要两个技巧:

FTP客户端程序,以防止FTP客户端试图登录,请使用-n选项。

这样,便不会谗ftp客户端的用户ID和密码。且不使用/dev/tty。

在脚本中将用户ID和密码发送到FTP服务器的ftp客户端程序中,来完成ftp的自动连接与登录。

提高

以上脚本在运行时,会输出很多信息,有时我们并不希望这样,可以这样操作:

复制代码 代码示例:

ftp -n $HOST > /tmp/ftp.worked 2> /tmp/ftp.failed <

通过作用于FTP客户端程序的退出状态,可以进一步细化误处理

复制代码 代码示例:

ftp -n $HOST > /tmp/ftp.worked 2> /tmp/ftp.failed <

blah blah

END_SCRIPT

EXITSTATUS=$?

if [ $EXITSTATUS != "0" ]

then

# handle the error...

fi

大多数FTP客户端总是退出状态0。

不过可能会遇到这样的情况:文件传输失败,但脚本没有检测到任何的问题。

有一种方法要吧验证一个文件是否发生传输成功:

复制代码 代码示例:

#!/bin/sh

ftp -n << END_SCRIPT

open $1

user $2 $3

put $4

get $4 retrieval.$$

bye

END_SCRIPT

if [ -f retrieval.$$ ]

then

echo "FTP of $4 to $1 worked"

rm -f retrieval.$$

else

echo "FTP of $4 did not work"

fi

大量的ftp文件传输,尤其是大文件的传输,会消耗很多时间。

此时,就可以考虑用我们今天介绍的shell脚本,来实现ftp文件的可控传输。

希望本文的介绍,对大家在shell中使用ftp操作文件方面,有一定的帮助。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值