2014年3月18日火曜日

LinuxのftpコマンドでディレクトリをFTP転送する方法

LinuxのftpコマンドでディレクトリをFTP転送することはできません。
転送したいファイルをあらかじめzip化したファイルを作成して転送する方法を記載します。

転送元サーバホスト名: dcf-web
転送元サーバOS: RHEL6.4 (64-bit)
転送元ディレクトリ: /tmp/ftp/
転送対象ファイル: fonts.zip sound.zip

転送先サーバホスト名: dcf-bak
転送先サーバIP: 192.168.47.50
転送先サーバOS: RHEL6.4 (64-bit)
転送先ディレクトリ: /backup/ftp/dcf-web/

OS: RedHat EL 6.4(64-bit)
vsFTPd: 2.2.2


■転送先サーバでFTPプロセスが起動していること

[root@dcf-bak ~]# /etc/init.d/vsftpd status
vsftpd (pid 19316) を実行中...
[root@dcf-bak ~]#
※送信元サーバのvsftpdプロセスは停止していてもOK。

■転送元ディレクトリ確認

※転送対象ディレクトリに /etc/fonts/ と /etc/sound/ を選んだ理由は特になし。
[root@dcf-web ~]# ll -d /etc/fonts/ /etc/sound/
drwxr-xr-x. 4 root root 4096  5月 29 06:25 2013 /etc/fonts/
drwxr-xr-x. 3 root root 4096  5月 29 06:27 2013 /etc/sound/
[root@dcf-web ~]#

■FTP転送用データ準備

転送対象ディレクトリをzipコマンドでアーカイブファイルを作成。
[root@dcf-web ~]# mkdir /tmp/ftp
[root@dcf-web ~]# zip -r /tmp/ftp/fonts.zip /etc/fonts/
  adding: etc/fonts/ (stored 0%)
  adding: etc/fonts/fonts.dtd (deflated 70%)
  adding: etc/fonts/conf.avail/ (stored 0%)
  adding: etc/fonts/conf.avail/10-sub-pixel-rgb.conf (deflated 27%)
(省略)
[root@dcf-web ~]# zip -r /tmp/ftp/sound.zip /etc/sound/
  adding: etc/sound/ (stored 0%)
  adding: etc/sound/events/ (stored 0%)
  adding: etc/sound/events/gtk-events-2.soundlist (deflated 60%)
  adding: etc/sound/events/gnome-2.soundlist (deflated 69%)
[root@dcf-web ~]#
[root@dcf-web ~]# ll /tmp/ftp/
合計 76
-rw-r--r-- 1 root root 53699  3月 18 15:49 2014 fonts.zip
-rw-r--r-- 1 root root 16499  3月 18 15:49 2014 sound.zip
[root@dcf-web ~]#

■ftpコマンド(解説付き)

[root@dcf-web ~]# ftp -ivn 192.168.47.50
Connected to 192.168.47.50 (192.168.47.50).
220 (vsFTPd 2.2.2)
オプション
 -i: 複数のファイルの転送中にプロンプトを出さないようにする。
 -v: リモートサーバからの全てのレスポンスを詳細表示する。
 -n: 自動ログインさせない。ログインにアカウントとパスワードを要求する。

ftp> user ftpuser secret
331 Please specify the password.
230 Login successful.
アカウント: ftpuser
パスワード: secret

ftp> lcd /tmp/ftp/
Local directory now /tmp/ftp
転送元サーバのディレクトリを移動。

ftp> cd /backup/ftp/dcf-web/
250 Directory successfully changed.
転送先サーバのディレクトリを移動。

ftp> bin
200 Switching to Binary mode.
バイナリモードに変更。

ftp> mput *.zip
local: fonts.zip remote: fonts.zip
227 Entering Passive Mode (192,168,47,50,28,169).
150 Ok to send data.
226 Transfer complete.
53699 bytes sent in 0.000782 secs (68668.80 Kbytes/sec)
local: sound.zip remote: sound.zip
227 Entering Passive Mode (192,168,47,50,254,125).
150 Ok to send data.
226 Transfer complete.
16499 bytes sent in 3.1e-05 secs (532225.82 Kbytes/sec)
zipファイルを転送

ftp> ls
227 Entering Passive Mode (192,168,47,50,104,238).
150 Here comes the directory listing.
-rw-r--r--    1 1120     1100        53699 Mar 18 06:57 fonts.zip
-rw-r--r--    1 1120     1100        16499 Mar 18 06:57 sound.zip
226 Directory send OK.
転送先のファイルリストを表示。

ftp> quit
221 Goodbye.
[root@dcf-web ~]#
FTPモード終了。

■転送先サーバでの確認

[root@dcf-bak ~]# ll /backup/ftp/dcf-web/
合計 76
-rw-r--r-- 1 ftpuser sshgrp 53699  3月 18 15:57 2014 fonts.zip
-rw-r--r-- 1 ftpuser sshgrp 16499  3月 18 15:57 2014 sound.zip
[root@dcf-bak ~]#

■転送先サーバで解凍してみる

解凍先ディレクトリに /root/work/ftp/ を指定。
[root@dcf-bak ~]# unzip /backup/ftp/dcf-web/fonts.zip -d /root/work/ftp/
Archive:  /backup/ftp/dcf-web/fonts.zip
   creating: /root/work/ftp/etc/fonts/
  inflating: /root/work/ftp/etc/fonts/fonts.dtd
   creating: /root/work/ftp/etc/fonts/conf.avail/
  inflating: /root/work/ftp/etc/fonts/conf.avail/10-sub-pixel-rgb.conf
(省略)
[root@dcf-bak ~]# unzip /backup/ftp/dcf-web/sound.zip -d /root/work/ftp/
Archive:  /backup/ftp/dcf-web/sound.zip
   creating: /root/work/ftp/etc/sound/
   creating: /root/work/ftp/etc/sound/events/
  inflating: /root/work/ftp/etc/sound/events/gtk-events-2.soundlist
  inflating: /root/work/ftp/etc/sound/events/gnome-2.soundlist
[root@dcf-bak ~]#
[root@dcf-bak ~]# ll /root/work/ftp/etc/
合計 8
drwxr-xr-x 4 root root 4096  5月 29 06:25 2013 fonts
drwxr-xr-x 3 root root 4096  5月 29 06:27 2013 sound
[root@dcf-bak ~]#
転送元サーバと同じタイムスタンプのディレクトリが作成された。

■FTP転送シェルスクリプト

#!/bin/sh
# 複数ファイルをFTP転送するシェルスクリプト
# 転送対象ファイルはあらかじめzip化し、*.zipとすること
# 転送元: LOCAL
# 転送先: REMOTE

LOCAL_DIR="/tmp/ftp"
REMOTE_HOST="192.168.47.50"
REMOTE_USER="ftpuser"
REMOTE_PASS="secret"
REMOTE_DIR="/backup/ftp/dcf-web"
LOG="ftp.log"

ftp -ivn ${REMOTE_HOST} << END > ${LOG}
user ${REMOTE_USER} ${REMOTE_PASS}
lcd ${LOCAL_DIR}
cd ${REMOTE_DIR}
bin
mput *.zip
quit
END

exit 0

■FTP転送実行とログ確認

[root@dcf-web work]# ./ftp.sh
[root@dcf-web work]# cat ftp.log
Connected to 192.168.47.50 (192.168.47.50).
220 (vsFTPd 2.2.2)
331 Please specify the password.
230 Login successful.
Local directory now /tmp/ftp
250 Directory successfully changed.
200 Switching to Binary mode.
local: fonts.zip remote: fonts.zip
227 Entering Passive Mode (192,168,47,50,175,113).
150 Ok to send data.
226 Transfer complete.
53699 bytes sent in 0.0005 secs (107397.99 Kbytes/sec)
local: sound.zip remote: sound.zip
227 Entering Passive Mode (192,168,47,50,171,39).
150 Ok to send data.
226 Transfer complete.
16499 bytes sent in 3.5e-05 secs (471400.00 Kbytes/sec)
221 Goodbye.
[root@dcf-web work]#
※転送先に同名ファイルが存在すると上書きする。

こちらの情報が何かのお役に立てましたら幸いです。サイト継続のご協力ありがとうございます。m(_ _)m

0 件のコメント:

コメントを投稿