4

制御下にないリモートftpサーバーから監視/ダウンロードするためのftpシステム設定があります。スクリプトはリモートFTPに接続し、サーバー上のファイルのファイル名を取得します。次に、そのファイルが既にダウンロードされているかどうかを確認します。ダウンロードされていない場合は、ファイルをダウンロードしてリストに追加します。

最近、リモートftp側の誰かが巨大な単一ファイル(> 1GB)をコピーすると、スクリプトがウェイクアップして新しいファイルを確認し、コピーされているファイルのダウンロードを開始するという問題が発生しました。

これを確認する最良の方法は何ですか?数秒待ってファイルサイズを取得し、ファイルサイズをもう一度確認して、ファイルサイズが増加しているかどうかを確認することを考えていました。増加していない場合は、ダウンロードします。ただし、時間が問題になるため、すべてのファイルセットを数秒待って、ファイルサイズが大きくなったかどうかを確認することはできません。

これを行うための最良の方法は何でしょうか。現在、すべてがpythons ftplibを介して行われていますが、前述の方法を使用する以外に、これをどのように行うことができますか。

繰り返しになりますが、リモートftpサイトを制御することはできません。

ありがとう。

UPDATE1:

名前を変更しようとするとどうなるか考えていました...ftpに対する完全なアクセス許可があるため、ファイルのアップロードが進行中の場合、名前変更コマンドは失敗しますか?

ここにはリアルオプションはありません...そうですか?

UPDATE2:転送が開始されると、テストしたftpのいくつかが自動的にスペースを割り当てるように見える興味深いものがあります。

たとえば、200MBのファイルをFTPサーバーに転送する場合。転送がアクティブな間、FTPサーバーに接続し、アップロード中にサイズを実行するとします。サイズは200mbです。ファイルは10%しか完成していませんが。

また、アクセス許可はランダムに設定されているようです。IISに付属のFTPサーバーは、ファイルのコピーが完了した後にアクセス許可を設定します。他の古いftpサーバーのいくつかは、ファイルを送信するとすぐにそれを設定します。

:'(

4

4 に答える 4

5
于 2008-12-17T19:49:01.270 に答える
0

OS のコピーがいつ完了したかはわかりません。遅くなったり、待ったりする可能性があります。

確実に言えば、実際には 2 つのファイルが必要です。

  • 巨大なファイル。
  • そして小さなトリガーファイル。

彼らは、好きなだけ巨大なファイルをいじることができます。しかし、トリガー ファイルに触れると、両方がダウンロードされます。


トリガーを取得できない場合は、ポーリングに必要な時間とダウンロードに必要な時間のバランスを取る必要があります。

これを行う。

  1. リストを取得します。タイムスタンプを確認します。

  2. ファイルのサイズと以前のサイズを確認します。サイズが近くない場合は、現在コピー中です。待って; サイズが前のサイズに近づくまで、このステップをループします。

  3. 完了していない間:

    a. ファイルを取得します。

    b. 再びリストを取得します。新しいリスト、以前のリスト、およびファイルのサイズを確認してください。彼らが同意した場合:完了です。同意しない場合: ダウンロード中にファイルが変更されました。あなたはまだ終わっていません。

于 2008-12-17T19:03:45.930 に答える
0

サーバーを制御できず、S. Lott が提案するようにクライアントにトリガー ファイルを投稿させることができないと言うように、おそらくしばらく待ってファイル サイズを比較することにより、不完全なソリューションに対処し、不完全なファイル転送のリスクを負う必要があります。前後。

あなたが提案したように名前を変更しようとすることはできますが、制御できないため、ftp-server-administrator (またはその後継者) がプラットフォームや ftp サーバーを変更したり、アクセス許可を制限したりしていないことを確認できません。

ごめん。

于 2008-12-17T19:19:30.253 に答える
0

複数のファイルを扱っている場合は、一度にすべてのサイズのリストを取得し、10 秒待ってどれが同じかを確認できます。どちらでも同じものを安全にダウンロードできます。

于 2008-12-17T19:23:06.000 に答える