- PR -

FTP ファイル一覧取得方法

投稿者投稿内容
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2004-09-22 13:56
引用:
ヤミーズさんの書き込み (2004-09-21 23:11) より:

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



そんな事は無いと思うのですけど...

rsync は rsh か ssh で通信しますので、おそらく、リモートホストが
このどちらの通信も許可していないのだと思います。
# 訂正 : リモートにも rsync のインストールは必要ですね。すみません。

もし、リモートの環境を変更する事が可能なら、rsync + ssh を
検討してみるのも良いと思います。

ファイルリストを取得するだけなら ftp コマンドで良いのでしょうけど、
目的は、差分があればそのファイルをダウンロードしたいのですよね。
だとしたら、スクリプトで行う場合、ftp コマンドだけじゃスゴく大変だと
思います。

ちなみに、ftpmirror というのも有りますが、詳しいことは忘れました。

[ メッセージ編集済み 編集者: はしもと 編集日時 2004-09-22 13:58 ]

[ メッセージ編集済み 編集者: はしもと 編集日時 2004-09-22 14:03 ]

[ メッセージ編集済み 編集者: はしもと 編集日時 2004-10-12 16:55 ]
水無月 遊々
大ベテラン
会議室デビュー日: 2003/10/22
投稿数: 139
お住まい・勤務地: お星様☆彡
投稿日時: 2004-09-22 17:54
引用:

ヤミーズさんの書き込み (2004-09-22 13:14) より:
 FTP時でのエラーチェックを行う良い方法等ご存知でしょうか?



bashのシェルを利用して、list.txtに対して以下の判定を行ったらいかがでしょう?(正常終了=ファイルの作成、異常終了=ファイルの未作成を利用するわけです)
引用:

-s file
file が存在し、かつそのサイズが 0 より大きければ真となります。



_________________
脱線のNUSHI(見習い) ☆⌒(*^▽°)
ヤミーズ
常連さん
会議室デビュー日: 2004/09/06
投稿数: 27
お住まい・勤務地: 東京都世田谷区
投稿日時: 2004-09-22 17:56
はしもと様返信ありがとうございます。

 不備、又は誤解を招く記載が多々ありましたので、【rsyncについて】と
【やりたいこと】について修正させて頂きました。
誤解を招く記載にてご迷惑をお掛け致しました。


【rsyncについて】
  始めに前回ホストとリモートという誤った使い方をしてしまいました。
 下記内容がHPに記載されており、ローカルとリモート両方に環境変更が必要であると
 判断しました。リモートパソコンは他の管理にあり環境変更を行う事ができません。
 その為rsyncの使用については断念させて頂きました。

 [記載内容]
 ”ローカルとリモートのシステムのサーチパスに rsync のコピーを置くか、
  make install して下さい。それだけです!

 [URL]
 http://www.infoscience.co.jp/technical/rsync/README.html


【やりたいこと】
 やりたいことについても詳細を下記に記載させて頂きます。
 下記処理時にFTP失敗の処理が抜けておりましたので追加質問させて頂きました。

 確かに、はしもと様ご指摘のように”ファイルの同期”を考えた場合は沢山の
 事象がありスゴく大変になると思いますが、実際は下記のような単純な考えです。
 メモリ管理、プロセス間通信、シグナル、同期・・・など考慮してません。
 誤解を招く記載にてご迷惑をお掛け致しました。


 機能:新しいバージョンアップファイルがアップロードされた場合、
    ダウンロードし、システム?の再構築を行う。

 詳細:@ファイル一覧取得      :掲示板にて解決!!
    A既存のファイル一覧と比較  :(cat a | awk '{print $9}' > b)等してロジック検索?
     Bダウンロードスクリプト更新:ファイルオープン、ライトなんかで書き換え
     Cファイルダウンロード   :system()でスクリプト実行(作成済★)
     Dファイル展開       :system()でスクリプト実行(作成済★)
     Eシステム?再構築     :system()でスクリプト実行(作成済★)
     FLAN内メール通知    :掲示板にて解決!!(ぽんす様ありがとうございます)

    ※@、Aは15分間隔でループ

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

ヤミーズ
常連さん
会議室デビュー日: 2004/09/06
投稿数: 27
お住まい・勤務地: 東京都世田谷区
投稿日時: 2004-09-22 18:24
水無月 遊々様返信ありがとうございます。

 これまた誤解を招く記載をしてしまいご迷惑をお掛けいたしました。

 確かにファイル一覧取得有無のエラー判定としては問題ないと思います。
しかし、大変申し訳ございませんがFTP通信時のエラー確認方法を求めております。

bashまた言語にてtelnet時に表示される実行結果(3桁数字)を認識する方法があれば
理想であり、下記障害時の検出に使用したいと思います。

 [問題エラー]
 ”FTP接続失敗、ファイル転送中止など”

偉そうな文章ばかりですみませんがよろしく御願いいたします。

MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-09-23 19:32
サイト
巡回
ダウンロード
新着判断
オートパイロット

などの 単語で検索してみましょう、FTP 版ですね。
自動翻訳、RSS 作成・配信 でしょうか ?
参考になる情報があると思いますが、
もとのサイトに RSS配信 を要求するほうが早いかも

システム・再構築なら CVS とか subversion 「更新」のほうかな ?

windows の「ファイル同期」 なら 、ブリーフケース(誰も使ってない?)

[ メッセージ編集済み 編集者: MMX 編集日時 2004-09-23 19:34 ]

[ メッセージ編集済み 編集者: MMX 編集日時 2004-09-23 22:04 ]
Toshi
ベテラン
会議室デビュー日: 2003/09/12
投稿数: 62
投稿日時: 2004-09-24 08:30
引用:

 機能:新しいバージョンアップファイルがアップロードされた場合、
    ダウンロードし、システム?の再構築を行う。



以前、似た機能を
ftpcopy
というコマンドを知人から教えて頂、実現したことがあります。
取得済みのファイルは飛ばして、再帰的にディレクトリ内をコピーしてくれました。
2>&1
で結果をリダイレクトすることで、取得したファイルとエラーも取得できるのでは?
ヤミーズ
常連さん
会議室デビュー日: 2004/09/06
投稿数: 27
お住まい・勤務地: 東京都世田谷区
投稿日時: 2004-09-24 11:44
MMX様、Toshi様返信ありがとうございます。

 FTP通信時のエラー確認方法を決めましたので報告します。
多々の助言ありがとうございました。

 方法はFTPに'-v'オプションを追加により、通信結果情報をファイルに落とすことが可能になった為、プログラミングにてサルベージしようと思います。
上記結果にてFTP接続失敗、ファイル転送失敗時にリトライ、エラー通知等の処理を
実装しようと思います。

[スクリプト]
 #!/bin/sh

 alias ftp=/usr/bin/ftp
 ftp -niv localhost >>log.txt << _EOD  ★vオプション追加
 user xxxx xxxx
 passive
 binary
 cd /home/xxxx
 ls ./ list.txt
 bye
 _EOD

[log.txt]
 Connected to localhost (127.0.0.1).
 220 (vsFTPd 1.1.3)
 331 Please specify the password.
 230 Login successful. Have fun.
 Passive mode off.
 200 Switching to Binary mode.
 250 Directory successfully changed.
 200 PORT command successful. Consider using PASV.
 150 Here comes the directory listing.
 226 Directory send OK.
 221 Goodbye.


TO:MMX様、Toshi様

 ファイル同期を行うツールを検索した結果多々あるようですね。
 ファイル一覧を取得し差分をダウンロードするという発想から
 あまりツールは意識してませんでした。ざっと考えた設計でしたので。。。
 今後いかしたいと思います。ありがとうございました。

 「ツール」
  ・ftpcopy
  ・lurkftp
  ・ftpmirror
  ・pavuk
  ・rsync


 2>&1については下記のようにスクリプトへ挿入してみましたがうまくいきませんでした。
 やはりFTPのエラー結果は通信データとして扱われると思われますので、シェルの方では
 エラー出力と判断してくれないようです。

 [2>&1入れ込み]
  ftp -ni xxxhost >error.txt 2>&1 << _EOD
  cd /home/xxxx >error.txt 2>&1  。。。等


以上 ありがとうございました。

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