免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: liuxuexin_xxlhz
打印 上一主题 下一主题

一个很不错的ftp脚本,但是我不会改哦 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-12-30 09:23 |只看该作者

一个很不错的ftp脚本,但是我不会改哦

我将
  1. diff filelist.name.txt filelist.txt |grep "<" |awk '{print $2}' >filetoget
复制代码

改写成
  1. diff filelist.name.txt filelist.txt |grep "<" |awk '{print $10}' >filetoget
复制代码
也能达到你说的效果
关键是
  1. for _FILENAME in `more filetoget|cut -b56-` ; do
  2.                 ftp -i -n $SPSC_SERVER <<MACRO_END2
  3.                 user $FTP_USERNAME $FTP_PASSWORD
  4.                 bin
  5.                 get $_FILENAME $_FILENAME.tmp
  6.                 #delete $_FILENAME
  7.                 bye
复制代码
里面的”filetoget“他的内容只是文件名,我就get不下来文件了,在没有修改之前是”filelist.$$.txt  “,而整个ftp程序第一步就是在服务器上获得所要取得的文件
  1. ftp -i -n $SPSC_SERVER <<MACRO_END1
  2.           user $FTP_USERNAME $FTP_PASSWORD
  3.           bin
  4.           ls *$FILE_PRENAME.*  filelist.$$.txt  
  5.           bye  
复制代码

这个问题怎么解决呢??

论坛徽章:
0
12 [报告]
发表于 2004-12-30 09:29 |只看该作者

一个很不错的ftp脚本,但是我不会改哦

顶楼的脚本还不错,就是太长了,看得晕。

论坛徽章:
0
13 [报告]
发表于 2004-12-30 09:49 |只看该作者

一个很不错的ftp脚本,但是我不会改哦

呵呵,我也是从晕到不晕的。不过现在又有些晕了,不知道怎么搞定他了。

论坛徽章:
0
14 [报告]
发表于 2004-12-30 10:20 |只看该作者

一个很不错的ftp脚本,但是我不会改哦

十三问--第九问中的
在使用 positional parameter 的時候,我們要注意一些陷阱哦:
* $10 不是替換第 10 個參數,而是替換第一個參數($1)然後再補一個 0 於其後﹗
也就是,my.sh one two three four five six seven eigth nine ten 這樣的 command line ,
my.sh 裡的 $10 不是 ten 而是 one0 哦... 小心小心﹗

那我上面用$10,filetoget 里面就是一些文件名呢
[/quote]

论坛徽章:
0
15 [报告]
发表于 2004-12-30 11:34 |只看该作者

一个很不错的ftp脚本,但是我不会改哦

我将filetoget改成在filelist.$$.txt就能get下来文件了
  1. for _FILENAME in `more filelist.$$.txt|cut -b56-` ; do
  2.                 ftp -i -n $SPSC_SERVER <<MACRO_END2
  3.                 user $FTP_USERNAME $FTP_PASSWORD
  4.                 bin
  5.                 get $_FILENAME $_FILENAME.tmp
  6.                 #delete $_FILENAME
  7.                 bye
复制代码

我想:读出filetoget中的文件,然后再
   
  1. ftp -i -n $SPSC_SERVER <<MACRO_END1
  2.           user $FTP_USERNAME $FTP_PASSWORD
  3.           bin
  4.           ls  从filetoget中读的文件名    filelist.really_want_to_get  
  5.           bye  
复制代码

然后我再从filelist.really_want_to_get  中get就好拉。
  1. for _FILENAME in `more filelist.really_want_to_get  |cut -b56-` ; do
  2.                 ftp -i -n $SPSC_SERVER <<MACRO_END2
  3.                 user $FTP_USERNAME $FTP_PASSWORD
  4.                 bin
  5.                 get $_FILENAME $_FILENAME.tmp
  6.                 #delete $_FILENAME
  7.                 bye
复制代码

怎么从文件filetoget中读出文件名,然后在用ls指令放到filelist.really_want_to_get  中呢,不知道我的思路行不行?

论坛徽章:
0
16 [报告]
发表于 2004-12-30 12:30 |只看该作者

一个很不错的ftp脚本,但是我不会改哦

[quote]原帖由 "liuxuexin_xxlhz"]怎么从文件filetoget中读出文件名,然后在用ls指令放到filelist.really_want_to_get  中呢,不知道我的思路行不行?[/quote 发表:
我看你的话有点晕,你是哪个实现了,哪个是想实现而没实现,不好意思,没看明白。

论坛徽章:
0
17 [报告]
发表于 2004-12-30 15:07 |只看该作者

一个很不错的ftp脚本,但是我不会改哦

不好意思,是我自己弄错了,你的说法就是正确的。不过在我的程序中有一个cut56这个参数,导致我从服务器上get不下来东东。我把整个修改好的文件贴上来,大家参考!
  1. #!/bin/sh
  2. # ftpget.sh



  3. SPSC_SERVER=192.168.0.1
  4. FTP_USERNAME=11
  5. FTP_PASSWORD=11
  6. FILE_PRENAME=11

  7. Log ()
  8. {
  9.         echo [`date '+%Y%m%d %H:%M:%S'` $$] $*
  10. }

  11. if [ "-?" = "$1" ]
  12. then echo usage: ftpgetsample.sh [-d dest_path]
  13.         echo         dest_path: The local path in which files are stored, the recv path is default.
  14.         echo    A sample: ftpget.sh -d /chroot
  15.         else
  16.         exec>>/chroot/log/recv`date '+%Y%m%d'`.log 2>&1
  17.         if [ "-d" = "$1" ]
  18.                 then DEST_PATH=$2
  19.                 else DEST_PATH=/chroot
  20.                 fi

  21.         cd $DEST_PATH
  22.         Log "Begin to get filelist..."
  23.        
  24.         # Step 1: Get the file list from FTP server
  25.         ftp -i -n $SPSC_SERVER <<MACRO_END1
  26.           user $FTP_USERNAME $FTP_PASSWORD
  27.           bin
  28.           ls *$FILE_PRENAME.*  filelist.$$.txt  
  29.           bye  
  30. MACRO_END1
  31.        
  32.         awk '{print $  9}' filelist.$$.txt >filelist.name.txt
  33.         diff filelist.name.txt filelist.txt |grep "<" |awk '{print $2}' > filetoget
  34.           
  35.         if [ ! -s filetoget ];then
  36.            Log "No file received......"
  37.            rm -f filelist.$$.txt
  38.            rm -f filelist.name.txt
  39.            rm -f filetoget                              
  40.            exit
  41.         fi

  42.         # Step 2: Get and delete each file in circle.
  43.         Log "transfering start..."
  44.         for _FILENAME in `cat filetoget` ; do
  45.                 ftp -i -n $SPSC_SERVER <<MACRO_END2
  46.                 user $FTP_USERNAME $FTP_PASSWORD
  47.                 bin
  48.                 get $_FILENAME $_FILENAME.tmp
  49.                        #delete $_FILENAME
  50.                 bye
  51. MACRO_END2
  52.         mv $_FILENAME.tmp $_FILENAME
  53.         Log "get $_FILENAME ok"  
  54.         gunzip $_FILENAME
  55.         Log "gunzip $_FILENAME ok"
  56.         done
  57.        
  58.         log "transfering completed."
  59.         cat filetoget >> filelist.txt            
  60.         rm -f filelist.name.txt
  61.         rm -f filetoget
  62.         rm -f filelist.$$.txt
  63.        
  64. fi
复制代码

当然了,这里还有几个问题不理解的

  1. if [ ! -s filetoget ];then
  2.            Log "No file received......"
  3.            rm -f filelist.$$.txt
  4.            rm -f filelist.name.txt
  5.            rm -f filetoget                              
  6.            exit
  7.         fi               
复制代码

这里的 -s filetoget,参数-s是什么意思呢?
还有
  1. for _FILENAME in `cat filetoget` ; do
  2.                 ftp -i -n $SPSC_SERVER <<MACRO_END2
  3.                 user $FTP_USERNAME $FTP_PASSWORD
  4.                 bin
  5.                 get $_FILENAME $_FILENAME.tmp
  6.                        #delete $_FILENAME
  7.                 bye
  8. MACRO_END2
复制代码
中的MACRO_END2是干吗用的??

论坛徽章:
0
18 [报告]
发表于 2004-12-30 15:09 |只看该作者

一个很不错的ftp脚本,但是我不会改哦

在此十分感谢un_xxx!!

论坛徽章:
0
19 [报告]
发表于 2004-12-30 15:23 |只看该作者

一个很不错的ftp脚本,但是我不会改哦

[quote]原帖由 "liuxuexin_xxlhz"]的MACRO_END2是干吗用的??[/quote 发表:


让俺这个菜鸟来回答:1.-s用来判断文件是否为空;2.<<输入的开始符号和结束符号,具体用什么可以自定义:)置于<<的用法,可以查找相关内容。

论坛徽章:
0
20 [报告]
发表于 2004-12-30 15:33 |只看该作者

一个很不错的ftp脚本,但是我不会改哦

这句exec>>/chroot/log/recv`date '+%Y%m%d'`.log 2>&1 里面的exec>>是什么意思,请大家指教!
意思是改变输出终端为/chroot/log/recv,然后把该日的日期写入/chrot/log/recv,错误也写入。是吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP