在工作中碰到这样一个问题:
我在测试一个服务器上的程序,
测试的时候每次操作都会产生一个LOG文件,
能够知道文件名和存放的目录(测试画面有显示)。
如果发现LOG文件上输出错误的话就需要查找原因,
如果没有错误的话,就要把LOG文件保留下来作为测试的证据。
问题是服务器上存放的LOG文件太多了(服务器不是我能够控制的),
用FTP工具在显示文件一览的时候就死了,过滤文件名也不行。
在终端上手动FTP的话,1分钟内不向服务器发个命令就被踢出来。
所以一直用ssh查看LOG,看到正确了在用ftp命令下载。
这样太麻烦了,所以自己查资料,发觉FTP还可以这样使用。
打开一个文件输入:[code]
#!/bin/bash
if [ $# -eq 0 ]
then
echo "请输入文件名"
exit 1
fi
LOGFILE=`mktemp -t ftplog.XXXXXXXXX` || exit 1
ftp -inv <
open server
user username password
get /var/log/test/$1 ./$1
bye
END
CNT=`grep -c '226 File send OK.' $LOGFILE`
if [ $CNT -eq 0 ]
then
echo "文件传送失败"
else
cat ./$1
fi
rm -f $LOGFILE
[/code]上述的例子里:
server 服务器
username 用户名
password 密码
/var/log/test/ LOG的目录
把文件保存为get.sh,然后付上执行权限。
使用方法:
把文件拷贝你想要存放文件的那个目录(当然可以放到/usr/bin/里面去)
然后在终端里进入那个目录,输入
./get.sh LOG文件名
这样就可以把LOG文件保存到本地目录,
如果文件不存在就显示[文件传送失败]
下载成功的话就显示文件内容。


h657609324 于 2013-08-28 17:08:59发表:
有点晕,不过还是明白了
jinlong1996 于 2013-07-24 10:02:15发表:
ding!
farseerlee 于 2013-07-16 14:01:54发表:
挺好,利用shell省去了不少敲命令的步骤
wst021 于 2010-06-09 21:03:39发表:
非常好啊,值得学习参考。
shenhao0129 于 2010-06-09 20:20:04发表:
好像我没有接触Linux之前,也写了一个类似的bat批处理来做类似的事情,但是功能远没有LZ的这么强大,呵呵!佩服
求知路漫漫 于 2010-06-02 13:11:30发表:
:0wl;l1
shen.yhx 于 2010-04-27 11:57:31发表:
学习中
balini 于 2009-07-23 19:26:40发表:
(e:e2s
wula9707 于 2009-07-08 17:36:01发表:
不懂 学习。。。
yzm890425 于 2009-07-06 00:31:27发表:
这个是做什么用的 好复杂哦
刘冲 于 2009-07-04 18:20:48发表:
原来FTP还可以这样用!
csl0371 于 2009-07-04 13:21:09发表:
可是我完全看不懂。。。
yangshan 于 2009-07-02 23:47:58发表:
高人!:ha3nd
ffsedan 于 2009-06-25 12:44:39发表:
牛啊
bbsytc 于 2009-06-25 10:01:36发表:
学习了 很不错的FTP
jianwugy 于 2009-06-22 00:43:44发表:
谢谢 哈哈{:3_111:}
刘冲 于 2009-06-18 22:29:39发表:
不粗,支持!
cwqing1973 于 2009-06-17 16:48:22发表:
支持一下,知识是学无止境的!知识也是灵性的。
henryhj 于 2009-06-14 23:25:35发表:
今天我想做一件简单的事情,差不多也就是read进一个字串,然后后面做一些操作,想用cmd试下,半天没辙,觉得cmd命令不怎么简单功能倒是相当简单,)3):o 还是bash好用(6)m:b
super123 于 2009-06-14 21:55:27发表:
好!学习了.........
jagub 于 2009-06-14 21:45:47发表:
写shell没费多少时间,DOS版的可是花了好几天才搞定的:0w223dc
zenwall 于 2009-06-14 21:25:22发表:
学习了 谢谢 哈哈
小普林斯 于 2009-06-14 16:53:57发表:
(e:e2s
icejoywoo 于 2009-06-14 16:33:19发表:
好多啊
xlsogb 于 2009-06-14 00:03:13发表:
噢,好复杂
jagub 于 2009-06-13 22:11:23发表:
[i=s] 本帖最后由 jagub 于 2009-6-13 22:16 编辑 [/i]
周围的兄弟们向我要这个程序,但是他们的机器是windowsXP
所以我又写了个DOS版的
别小看了DOS,现在的DOS也很牛的(当然比起Shell,那是小儿科了)
打开一个文件输入[code]
@echo off
setlocal
if .%1==. (
echo 请输入文件名
goto end
)
set file=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%%TIME:~3,2%%TIME:~6,2%%TIME:~9,2%
set cmdfile=%temp%\%file%.ftp
set logfile=%temp%\%file%.log
echo open server>%cmdfile%
echo user username password>>%cmdfile%
echo asci>>%cmdfile%
echo mget /var/log/test/%1>>%cmdfile%
echo bye>>%cmdfile%
ftp -i -n -s:%cmdfile%>%logfile%
set /a scnt=0
for /F "usebackq" %%A in (`findstr /C:"226 File send OK." %logfile%`) do set /a scnt+=1
del %cmdfile%
del %logfile%
if %scnt% EQU 0 (
echo 文件传送失败
) else (
type %1
)
:end
endlocal
[/code]同样上述的例子里:
server 服务器
username 用户名
password 密码
/var/log/test/ LOG的目录
把文件名保存为get.bat,
使用方法:
把文件拷贝到存放文件的那个目录,在CMD窗口里进入那个目录,输入
get 文件名
DOS版的和Linux上的有些不同
1,FTP的 -v 参数,Linux的FTP是显示服务器传送的消息,DOS的FTP是不显示服务器传送的消息
2,FTP的get命令,Linux的FTP,如果服务器上文件不存在的话,是不会在本地建立文件的。DOS的FTP会建一个0字节的文件。所以DOS版的改成mget了
3,DOS版的回车是CRLF,Linux的是LF,所以DOS版用的是ASCII模式下载的