- - PR -
FTP ファイル一覧取得方法
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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." やりたい事としては定期的にファイル一覧を取得し、差分があればそのファイルの ダウンロードを行うというものですが、いきなりつまってしまいました。 以上 宜しくお願いいたします。 | ||||||||||||
|
投稿日時: 2004-09-21 15:53
rsync の利用を検討してみては如何でしょうか。 http://rsync.samba.org/ http://www.infoscience.co.jp/technical/rsync/ ssh と組み合わせてマシン間でファイルの同期を取ったりできるようです。 | ||||||||||||
|
投稿日時: 2004-09-21 18:55
VineのFTPのmanから引用しますが、デフォルトの機能で出来るようなのですが…^^;
_________________ 脱線のNUSHI(見習い) ☆⌒(*^▽°) | ||||||||||||
|
投稿日時: 2004-09-21 20:00
こんばんわ.
back-end でやるならNeXT様ご指摘の rsync などを使ったらよいのではないかと. front-end でやるなら ffftp などの Windows で動く ftp client のいくつかで 「ミラーリング・ダウンロード」な機能があります. どうしても ftp なら,こういうのではダメですかね? 以上,ご参考までに. | ||||||||||||
|
投稿日時: 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") ; } | ||||||||||||
|
投稿日時: 2004-09-22 00:04
先ほども書いたのですが、ftp標準の機能で実現できます。(きちんと読んでいただけなかったようで残念ですが)以下、ftpサーバからファイルリストをローカルのファイルに落とすサンプルです。
ftpコマンドスクリプト(macro.txt)
実行コマンドライン
出力結果(list.txt)
_________________ 脱線のNUSHI(見習い) ☆⌒(*^▽°) | ||||||||||||
|
投稿日時: 2004-09-22 00:29
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-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 以上 よろしく御願いいたします。 |