- PR -

FTP ファイル一覧取得方法

投稿者投稿内容
ヤミーズ
常連さん
会議室デビュー日: 2004/09/06
投稿数: 27
お住まい・勤務地: 東京都世田谷区
投稿日時: 2004-09-19 10:25
お世話になっております。

 FTPのファイル一覧をテキストに落としたいのですが方法を知りません。
ご存知の方ご教授願います。
ls >> ftp.txt のリダイレクトでは下記メッセージが出現してできそうですが
ファイルの中身は空でした。

 "output to local-file: ftp.txt?
  227 Entering Passive Mode (10,53,28,251,46,196)
  150 Here comes the directory listing.
  226 Directory send OK."

やりたい事としては定期的にファイル一覧を取得し、差分があればそのファイルの
ダウンロードを行うというものですが、いきなりつまってしまいました。

以上 宜しくお願いいたします。
NeXT
大ベテラン
会議室デビュー日: 2004/04/06
投稿数: 215
お住まい・勤務地: 江戸
投稿日時: 2004-09-21 15:53
引用:

ヤミーズさんの書き込み (2004-09-19 10:25) より:
やりたい事としては定期的にファイル一覧を取得し、差分があればそのファイルの
ダウンロードを行うというものですが、いきなりつまってしまいました。



rsync の利用を検討してみては如何でしょうか。
http://rsync.samba.org/
http://www.infoscience.co.jp/technical/rsync/

ssh と組み合わせてマシン間でファイルの同期を取ったりできるようです。
水無月 遊々
大ベテラン
会議室デビュー日: 2003/10/22
投稿数: 139
お住まい・勤務地: お星様☆彡
投稿日時: 2004-09-21 18:55
引用:

ヤミーズさんの書き込み (2004-09-19 10:25) より:
 FTPのファイル一覧をテキストに落としたいのですが方法を知りません。
ご存知の方ご教授願います。



VineのFTPのmanから引用しますが、デフォルトの機能で出来るようなのですが…^^;

引用:

ls[remote-directory][local-file]

リモートマシン上のディレクトリの内容をリスト表示する。リストにはサーバが選択したシステム依存の情報が含まれる。例えば、大部分のシステムでは `ls-l' コマンド (nlistを参照)による出力が行われる。リモートディレクトリ remote-directory が指定されない場合、カレントワーキングディレクトリが指定される。対話プロンプトが on の場合、ftp は最後の引き数が本当に ls の出力を書き込むローカルファイルであるかを確認するプロンプトを出す。ローカルファイルが指定されない場合、または local-file が `-' の場合、出力は端末に送られる。




_________________
脱線のNUSHI(見習い) ☆⌒(*^▽°)
kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 2004-09-21 20:00
こんばんわ.
引用:

ヤミーズさんの書き込み (2004-09-19 10:25) より:

やりたい事としては定期的にファイル一覧を取得し、差分があればそのファイルの
ダウンロードを行うというものですが、いきなりつまってしまいました。


back-end でやるならNeXT様ご指摘の rsync などを使ったらよいのではないかと.
front-end でやるなら ffftp などの Windows で動く ftp client のいくつかで
「ミラーリング・ダウンロード」な機能があります.
どうしても ftp なら,こういうのではダメですかね?

以上,ご参考までに.
ヤミーズ
常連さん
会議室デビュー日: 2004/09/06
投稿数: 27
お住まい・勤務地: 東京都世田谷区
投稿日時: 2004-09-21 23:11
NeXT様、水無月 遊々様、kaz様返信ありがとうございます。

 すみませんがNeXT様に対してのみ確認結果を報告させていただきます。
 rsyncというツールですが、現環境で本ツールを使用することはできまんでした。
rsyncを確認させて頂きますとホストとリモート両方にインストールが必要であるようです。
記載が漏れており申し訳ございませんでしたが、ホストは他の場所に存在し、こちらから操作が
行える環境ではありません。

 現在下記シェルスクリプトに"script ftp.txt"(★箇所)を追加し実行しましたが、
"スクリプトを開始しました、 ファイルはftp.txtです"
と表示され、script以降の処理が実行されませんでした。

C言語ソースより、system()関数を用いて実行しましたがシェルスクリプトと同様になりました。

 [シェルスクリプト]
  #!/bin/sh
  script ftp.txt★
  ftp -n mblyp435 << _EOD
  user xxxx xxxx
  passive
  binary
  cd /home/xxxx
  ls
  bye
  _EOD

 [system関数]
 main()
{
system("script ftp.txt") ;
system("./ftp.sh") ;
system("exit") ;
}
水無月 遊々
大ベテラン
会議室デビュー日: 2003/10/22
投稿数: 139
お住まい・勤務地: お星様☆彡
投稿日時: 2004-09-22 00:04
先ほども書いたのですが、ftp標準の機能で実現できます。(きちんと読んでいただけなかったようで残念ですが)以下、ftpサーバからファイルリストをローカルのファイルに落とすサンプルです。

ftpコマンドスクリプト(macro.txt)
コード:
open ring.asahi-net.or.jp
user anonymous mozilla@mozilla
prompt
ls ./ list.txt
exit



実行コマンドライン
コード:
$ ftp -n < macro.txt



出力結果(list.txt)
コード:
-r--r--r--   1 mirror   mirror   43320117 Sep 17 22:35 00ls_archive.tmp
lrwxrwxrwx   1 root     other           3 Dec 22  2003 archives -> pub
-rw-r--r--   1 root     other         657 Oct 25  2002 index-j.html
-r--r--r--   1 mirror   mirror      17416 Sep 21 20:51 index.html.en
-r--r--r--   1 mirror   mirror      19195 Sep 21 20:51 index.html.ja
drwxr-xr-x   3 mirror   mirror        512 Apr 11  2003 local
-r--r--r--   1 mirror   mirror   30189705 Sep 20 22:25 ls-lR.gz
drwxr-xr-x  20 mirror   mirror        512 Mar 14  2004 pub
drwxr-xr-x  11 mirror   mirror       3072 Sep 21 20:51 ring



_________________
脱線のNUSHI(見習い) ☆⌒(*^▽°)
NeXT
大ベテラン
会議室デビュー日: 2004/04/06
投稿数: 215
お住まい・勤務地: 江戸
投稿日時: 2004-09-22 00:29
引用:

ヤミーズさんの書き込み (2004-09-21 23:11) より:
 rsyncというツールですが、現環境で本ツールを使用することはできまんでした。
rsyncを確認させて頂きますとホストとリモート両方にインストールが必要である
ようです。
記載が漏れており申し訳ございませんでしたが、ホストは他の場所に存在し、こちらから操作が行える環境ではありません。




ftp クライアントに -i オプションを付けて実行してみたらどうでしょうか。
RedHat Linux9 の ftp(1) に

-i 複数のファイルの転送中に対話 (interactive) プロンプトを出さないようにする。

とあります。
また ls の 引数にリモートディレクトリと,リストを出力したいファイルを指定した
らどうでしょうか。これも上記 man page に記述があります。
とゆうか水無月 遊々様の記述そのまんまですね。

------------- ここから -----------------------------
#!/bin/sh

/usr/bin/ftp -i リモートホスト名 << _EOD

passive
binary
cd /home/XXXX
ls .    /tmp/ftp.list.txt
bye
_EOD
------------- ここまで -----------------------------

ちゃんとテストしていないので,水無月 遊々様の書かれた方法がよいかもしれません。
また環境によってはお望みの動作をしないかもしれませんし,オプション等の調整が必
要になるかもしれません。

可能であれば
http://www.linux.or.jp/link_documents.html
あたりも参照してみるのもよいでしょう。
ヤミーズ
常連さん
会議室デビュー日: 2004/09/06
投稿数: 27
お住まい・勤務地: 東京都世田谷区
投稿日時: 2004-09-22 13:14
水無月 遊々様、NeXT様返信ありがとうございます。

 確認結果を報告させていただきます。

 成功しました。ありがとうございます。下記@に成功シェルスクリプトを記載します。
 manコマンドは確認漏れでした。すみません。

 よろしければもう一点お聞きしたいことがあります。
 それはFTPのエラー処理です。
 bashでは$?を参照し下記Aシェルスクリプトにて終了コードチェックを行っておりますが、
 FTP時ではチェックできません。
 FTP時でのエラーチェックを行う良い方法等ご存知でしょうか?

 [@成功シェルスクリプト]
 #!/bin/sh

 ftp -ni localhost << _EOD
 user xxxx xxxx
 passive
 binary
 cd /home/xxxx
 ls ./ list.txt
 bye
 _EOD

 [A終了コードチェックスクリプト]
 if [ $? -ne 0 ] ; then
  echo "めっせーじ"
  exit 1
 fi

以上 よろしく御願いいたします。

スキルアップ/キャリアアップ(JOB@IT)