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"