FTPからのダウンロード

30分プログラム、その88。
FTPからファイルをダウンロードするやつ。

#! /opt/local/bin/ruby -w
# -*- mode:ruby enconding:utf-8 -*-
#
# ftp_get.rb - 
#
# Copyright(C) 2007 by mzp
# Author: MIZUNO Hiroki <hiroki1124@gmail.com> 
# http://mzp.sakura.ne.jp/
#
# Timestamp: 2007/07/23 08:53:59
# 
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Ruby itself.
#

require 'net/ftp'
host,username,password,*_= ARGV

ftp = Net::FTP.new host,username,password
ftp.passive = true
ftp.chdir 'Logs'

# 最新のログから7日前までを取得
ftp.nlst.reverse[0,7].each{|filename|
  puts filename
  
  begin 
    ftp.get filename
  rescue => e
    puts "ERROR: #{e}skip #{filename}"
  end
}

これだけだと対して、おもしろくないけど、id:mzp:20070722:ftpと組み併せると、FTPで「最近更新されたファイルは?」が実現できる。

#!/bin/sh
####################
# setting
####################
LOG_HOST=example.com
LOG_USER=foo
LOG_PASS=bar

UP_HOST=example.com
UP_USER=hoge
UP_PASS=hage

# clean
rm -f *.log

# get log file
echo "get log file"
ruby ftp_get.rb $LOG_HOST $LOG_USER $LOG_PASS

# analyze
echo "make ranking"
ruby ftp_recently.rb *.log > updates.txt

# upload
echo "upload"
ftp -n $UP_HOST <<EOF
user $UP_USER $UP_PASS
passive
binary
put updates.txt
bye 
EOF