RubyにおけるFTP通信のサンプルコード
[履歴] (2014/02/02 03:38:50)

概要

rubyのインストール時に標準で付属しているnet/ftpライブラリを使用するとFTP通信でサーバとのファイルのやり取りができます。

サンプルコード

sample.rb

#!/usr/bin/ruby
# -*- coding: utf-8 -*-
require 'net/ftp'

# コネクションを確立してログイン
ftp = Net::FTP.new
ftp.connect('192.168.100.100','PORTNUM')
ftp.login('USERNAME','PASSWD')

# カレントディレクトリを表示
puts ftp.pwd

# ディレクトリを移動
ftp.chdir 'sdcard/download/testdir'
puts ftp.pwd

# ファイルを置く
ftp.put('sample.rb', 'put.rb')

# ファイル情報の配列を取得
p ftp.ls

# ファイル名を変更
ftp.rename('./put.rb', './rename.rb')
p ftp.ls

# ファイルを取得
ftp.get 'rename.rb'

# ファイルを削除
ftp.delete 'rename.rb'
p ftp.ls

# ディレクトリを作成
begin
  ftp.mkdir './mkdir'
rescue Net::FTPError
  # net/ftpライブラリ関連のエラー全般を表す例外クラス
  # 既にディレクトリが存在している場合はエラー
  # (環境によっては成功時にもエラーが出る)
ensure
  p ftp.ls
end

# ディレクトリを削除
begin
  ftp.rmdir './mkdir'
rescue Net::FTPError
  # net/ftpライブラリ関連のエラー全般を表す例外クラス
  # ディレクトリが存在していない場合はエラー
  # (環境によっては成功時にもエラーが出る)
ensure
  p ftp.ls
end

# ある特定のファイルまたはディレクトリの存在有無を確認
begin
  exist = ftp.ls './never_exist.txt'
  p 'exist' if exist
rescue Net::FTPError
  # 存在しない場合はlsで例外が発生
  p 'not exist'
end

# 通信を終了
ftp.quit

実行例

$ ruby sample.rb 
/
mnt/sdcard/download/testdir
["-rw-r--r-- 1 owner group         1484 Feb 01 18:37 put.rb"]
["-rw-r--r-- 1 owner group         1484 Feb 01 18:37 rename.rb"]
[]
["drwxr-xr-x 1 owner group            0 Feb 01 18:37 mkdir"]
[]
"not exist"
関連ページ