一个ftp shell的例子

来源:互联网 发布:plc编程培训嘉定 编辑:程序博客网 时间:2024/05/05 22:28

#远程目录下每天会根据产生群ID来产生目录,因为每天的产生的群ID是不同的,所以目录名称和个数也是不定的
#但是每个目录下生成的文件是相同,不仅文件格式相同,文件名称也是相同的,但是文件内容是不同的
#我们现在要下载这些文件,使他们能被ETL调用,但是ETL不能识别可变目录,只能识别可变文件
#所以我们的处理方案是将文件下载下载到同一个目录下,但是因为文件名是相同的,而目录名是不同的
#所以我们将文件名改为目录名.例如:远程目录/951/filesize.txt,远程目录/952/filesize.txt,那么下载到本地后
#变成 本地目录/951 远程目录/952 ,注意此时本地目录下的951是远程目录/951/filesize.txt,本地目录下的952是远程目录/952/filesize.txt,


#远程主机登录用户名
 username=mad
#远程主机登录用户密码
 password=mad
#远程主机ftp下载目录
 ftp_dir=/home/mad/mkt_home/webapps/data/ad/bi/task
#本地存放下载文件的目录
 local_dir=/home/etl/business/mad/send
#需要下载的文件名
 filename=filesize.txt
#记录所有需要下载的目录的文件
 dir_record=dir_record.txt
#进入本地目录
  cd $local_dir
#登录远程主机,进入到远程目录,列出远程目录下所有目录打印到本地目录中一个文件中
  echo "---->start read dir"
  (echo "user $username $password"
   echo "cd $ftp_dir"
   echo "prompt"
   #列出远程远程目录下所有目录打印到本地目录中的${dir_record}这个文件中
   echo "mdir $ftp_dir ${local_dir}/${dir_record}"
   #表示同意。即"yes"
   echo "y"
   echo "by")|ftp -v -i -n 192.168.163.41
  echo "---->start get file"
 

 #读取记录目录的文件,取得对应的远程目录
 # 'substr($0,1,1)=="d" 判断是否是文件类型是否是目录。{print $9}即打印目录名
 #肯定是要循环读取了
   for dir in `cat $dir_record|awk 'substr($0,1,1)=="d" {print $9}'`
   do
     cd $local_dir
     #将要访问远程目录
     sub_ftp_dir=${ftp_dir}/$dir
     echo "sub_ftp_dir="$sub_ftp_dir
    
     (echo "user $username $password"
      echo "prompt"
      echo "cd $sub_ftp_dir"
      #从远程目录获取
      echo "get $filename"
         #表示同意。即"yes"
      echo "y"
      echo "by")|ftp -v -i -n 192.168.163.41 
     #改名,即将文件名改为它所在的目录名
      mv $filename $dir
       
   done
   #进入本地目录
   cd $local_dir
   #删除记录远程目录的文件
   rm $dir_record
  
    

原创粉丝点击