見てから WebDAVに利用可能なLinuxクライアント 、これを行うための私自身の好ましい方法は次のようになります。
GVFSまたはWebDAVファイルシステムモジュールの1つ(davfs2またはfuseav)を使用して、リモートWebDAVサーバーのファイルをローカルファイルシステムパスに "マップ"します。
内蔵を使う cp でコマンド -n
宛先のファイルを「上書きしない」ように指示するオプション。次のような特定のシェルに注意してください。 dash
Ubuntuでは、 builtin
のバージョン cp
デフォルトではこのビルトインは -n
オプション。最良の結果を得るには、GNU Coreutilsバージョンのを実行していることを確認してください。 cp
実行して /bin/cp
または /usr/bin/cp
(バイナリがあなたの特定のシステムのどこにあるかによります)。
編集:あなたの最初の質問を誤解しました。
私はあなたが言っているのはあなたがファイルの状況があるということだと思います file1.txt
WebDAVサーバーの2つの異なるパスに存在する 内容 これら2つのファイルのまったく同じです。そして、あなたはすでにファイルのコピーを1つ持っているので、帯域幅を浪費するので、あなたはファイルの2番目または3番目のコピーをダウンロードしたくありませんか?
まあ、 クライアント側から 、これは非常に難しいでしょう。これが理由です。
あなたは見なければなりません 比較しているもの ファイルが一意かどうかを判断し、 要件/コスト その比較をするために。
私 想定された あなたが比較していたのは パス WebDAVフォルダ構造のルートに対する相対パス。パスの等価性比較を行うコストは非常に簡単です。次のように、2つのパス文字列を見るだけです。 /dir1/dir2/file1.txt
文字列が一致するかどうかを確認します。もしそうなら、それは重複しています。そうでなければ、そうではありません。
もう一つ比較できるのはファイルです。 名 無視して パス 。したがって、たとえば、これら2つのファイルが重複しているとします。 /dir1/dir2/file1.txt
そして /dir3/dir4/file1.txt
?まあ、あなたがいるなら のみ に基づいて比較する 名 それから、これらは重複していると見なされます。ただし、ユースケースに適した種類のテストを作成するために、さまざまなテストを自由に組み合わせて組み合わせることができます。
比較するのに便利ではないその他の特性 ファイルサイズ 、 属性 (としても知られている メタデータ ほとんどの場合、他のファイルと同じプロパティを持つが完全に異なる内容を持つファイルを作成するのは簡単なので内容が異なる場合、ほとんどの人は2つのファイルが重複しているとは考えません。
私の意見では、あなたが比較できる最も重要なことはファイルです。 内容 。残念ながら、WebDAVクライアントの観点からは、ファイルを既にダウンロードしていない限り、ファイルの内容を知る方法はありません。クライアントに関しては、ファイル転送中または転送後にファイルの内容が変わる可能性があります。その場合は、ファイルを再ダウンロードすると重複比較の結果が変わります。
ファイルの内容を比較する基本的な方法は2つあります。 バイトごと 、そして ハッシング 。バイトのバイトは重複をチェックするための最も「保証された」方法ですが、それはあなたが比較しなければならないという制限に苦しみます ファイル全体 これは大量のデータに対しては非常に遅いです。重複検出の基本的なアルゴリズムの複雑さは、 O(n^2)
つまり、重複しているかどうかを判断するには、各ファイルの内容を他のファイルの内容と比較する必要があります。暗号ハッシュを使用してファイルを比較すると、比較または転送する必要があるデータ量を大幅に減らすことができますが、欠点は、2つのファイルが実際には存在する可能性が非常に小さいことです。 違う しかし、同じハッシュを持っています - ハッシュ衝突として知られています。
しかし、再び クライアント 見通し、それを知ることは不可能です 何 あなたが以下のいずれかをしていなければ、ファイルの内容は、あるいはそのハッシュです。
- サーバーからファイルをダウンロードしてください。または
- ローカルであなたに代わってハッシュ値を計算し、それからハッシュをダウンロードするようにサーバーを説得してください。
前者の場合は、ファイルをダウンロードしないようにするためにファイルが重複しているかどうかを判断するためにファイルをダウンロードしているため、明らかにできません。 比較を実行するためだけに !
後者の場合、あなたは何かを続けているかもしれません。非常に大きなファイルのSHA1ハッシュは、ほんの数バイトであり、大きなファイルのサイズのごく一部を表しています。すべてのファイルのハッシュをダウンロードして実行するのはかなり実用的です。 O(n^2)
の比較 ハッシュ ダウンロードするファイルを決定します。ただし、これらの比較を行っている間にサーバー上でファイルデータが変更された場合でも競合状態の問題が発生します。そのため、重要な場合は必ず同期を考慮に入れる必要があります。
だから、結論:
- IF あなたはWebDAVサーバを完全にソフトウェアで制御することができず、その設定を変更することができません。あなたはすでに同じもののコピーを持っているかどうかを判断することで大いに不運です。 ファイル内容 サーバー上の複数のファイルに格納されている ない限り サーバー管理者は、サーバー上のすべてのファイルに対してある種のハッシュファイルをすでに利用可能にしています。ハッシュ値に頼ることができれば、ある程度の成功を収められるかもしれません。
- IF 君は 行う WebDAVサーバーを完全にソフトウェア制御している 有能 その設定を変更するには、スクリプトやプログラムを書く(あるいは既に利用可能なものを使う)などの拡張子を持つハッシュファイルを作成したいかもしれません。
.sha1sum
WebDAVサーバーによってホストされるすべてのファイルと同じディレクトリにあります。ファイルのサイズが数キロバイトを超えると仮定すると、これにより、ハッシュのみをダウンロードして比較することができます。ファイルのサイズと比較すると比較的わずかな帯域幅のコストです。