FTP リモート先のファイル名一覧をローカルに保存する方法

同僚に聞かれてすぐに応えられなかったので備忘録としてメモ。

ファイル一覧を出力する

単純にファイル一覧を取得するにはlsコマンドで出力できる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ ftp
ftp> open ftp.exsample.com
Name (xxxx): [ユーザー名応答]
Password: [パスワード応答]
230 User code-life logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
drwxr-xr-x 428 root     wheel        9216 Sep 16 18:40 ..
-rw-r--r--   1 code-life users         773 Jan  7  2009 .cshrc
-rw-r--r--   1 code-life users         258 Jan  2  2009 .login
-rw-r--r--   1 code-life users         167 Jan  2  2009 .login_conf
-rw-r--r--   1 code-life users         762 Jan  7  2009 .profile
-rw-r--r--   1 code-life users         980 Jan  2  2009 .shrc
drwx------   2 code-life users         512 Mar 13  2009 .spamassassin
drwx------   2 code-life users         512 Mar 13  2009 .ssh
drwxr-xr-x   5 code-life users         512 Aug 20 22:01 www

出力したファイル一覧をローカルに保存する

lsの標準出力をファイルに出力できるかと思ったができない。

1
2
3
4
5
6
ftp> dir > test.txt
output to local-file: test.txt [anpqy?]? y
229 Entering Extended Passive Mode (|||27752|)
150 Opening ASCII mode data connection for file list
     0        0.00 KiB/s
     450 >: No such file or directory

help lsで確認するとlist contents of remote pathと期待した応答はしてくれなかった。不親切だ。

man ftpで確認する。

1
2
ls [remote-path [local-file]]
            A synonym for dir.

ということでリモートパスとローカルファイルを指定する。ここではカレントディレクトリのファイル一覧を取得する。

1
2
3
4
5
6
ftp> ls . filelist.txt
output to local-file: filelist.txt [anpqy?]? y
229 Entering Extended Passive Mode (|||14481|)
150 Opening ASCII mode data connection for file list
  1104       38.53 KiB/s
  226 Transfer complete

出力したfilelist.txtはローカルのホームディレクトリ直下にダウンロードされているのが確認できる。

ファイル一覧を再帰的に出力する

再帰的にファイル一覧を出力するにはRオプションを指定する。

1
ftp> ls -R

再帰的に出力したファイル一覧をローカルに保存する

Rオプション指定時にはリモートパスの指定はできない。カレントディレクトリから再帰的に一覧を取得する。

1
ftp> ls -R filelist.txt

結果は上記と同様にローカルのホームディレクトリ直下にダウンロードされている。

こういったちょっとしたことを、さっと応えられるようにしたい。

Comments