FTPリスト
30分プログラム、その85。FTPのファイル一覧を取得するプログラム。
- FTPサーバにいっぱいファイルがあるなぁ
- どれが更新されたか分りづらいなぁ
- 更新情報を自動生成したら、おもしろいかな
- ファイルリストを生成して、diffでいいな
という動機。本当に稼動するかどうかは、管理者な人々と相談してからだけどね。
あと、うちの不安定な無線LAN回線の状況を反映して、簡易ながらレジューム機能もついてる。
#!/opt/local/bin/ruby -w require 'net/ftp' require 'kconv' RESUME = 'ftp_list.resume' queue = [] result = [] if File.exist?(RESUME) STDERR.puts "resumed" File.open(RESUME){|io| queue,result = Marshal.load io.read } end ftp = Net::FTP.new(*ARGV) queue += ftp.nlst begin until queue.empty? do dirname = queue.shift dirname_jp = dirname.toutf8 list = ftp.nlst dirname STDERR.puts "Process...: #{dirname_jp}" if list == [dirname] then STDERR.puts "Get File: #{dirname_jp}" result << dirname_jp else STDERR.puts "Add Queue: #{list[0..3].inspect}" queue += list end end File.open('ftp_list.out','w'){io.puts result.join("\n")} puts result.join("\n") File.delete RESUME rescue SignalException,StandardError => e STDERR.puts "FAILURE!!" STDERR.puts e.inspect File.open(RESUME,'w+'){|io| io.print Marshal.dump([queue,result]) } end