FTP ファイル転送のスケジュールを設定しようとしていますが、帯域幅を節約するために、変更されたファイルのみをアップロードしたいと考えています。さまざまなホスティングプロバイダーで機能する、これを行うための信頼できる方法は何ですか?
1 に答える
まず、ローカル ファイルが実際に変更されたかどうかを確認することは、FTP とは何の関係もありません。ファイルが変更された場合にのみ、ファイルをアップロードするために FTP 接続を開くと述べています。
大まかに言えば、採用する必要がある基本的な戦略は、アプリケーションが最後に変更をチェックした日時 (前回の実行タイムスタンプ) を追跡し、それをアップロードするファイルのタイムスタンプと比較することです。ファイルのタイムスタンプの方が新しい場合は、ファイルが変更されている可能性が高くなります。タイムスタンプのみを更新できる可能性が高いためです(たとえばtouch
、unix/linuxで)。
特定のディレクトリ内のすべてのアイテムの変更時間を確認する方法を示す簡単な例を次に示します。
import os, time
checkdir="./"
for item in os.listdir(checkdir):
item_path = "%s%s"%(checkdir,item)
mtime = os.path.getmtime(item_path)
print "%s: %s" %(item_path,mtime)
これはファイルの種類 (通常のファイル、ディレクトリ、シンボリックリンクなど) を区別しないことに注意してください。os.pathのドキュメントを読んで、必要に応じて特定のタイプをスキップできるように、ファイル タイプを判別する方法を確認してください。
後続のスキャンで参照できるように、前回の「スキャン」の時間を保存するロジックを考え出す必要があります。これを行うための非常に簡単な方法は、値をファイルに保存することです。
2 つの「スキャン」が重複する場合に備えて、必ずロック戦略を使用してください。FTP アップロードが完了するまでに時間がかかります。