wgetにファイルが存在する場合、ダウンロードをスキップしますか?


回答:


269

次のパラメータを試してください。

-nc--no-clobber:既存のファイルにダウンロードするダウンロードをスキップします。

使用例:

wget -nc http://example.com/pic.png

34
-ncHTTPリクエストの送信とその後のファイルのダウンロードを妨げません。ファイルが完全に取得されている場合、ファイルをダウンロードした後は何もしません。ファイルがすでに存在する場合に、HTTPリクエストを実行しないようにする方法はありますか?stackoverflow.com/questions/33203898/…–
ma11hew28

8
リンクされた質問で述べたように、私は同意しません-no-clobberが使用され、ファイル名が存在する場合、それは存在します。HEADリクエストもありません。これが当てはまらない場合でも、:-)で始まるファイルがあるかどうかを確認してください。[ ! -e "$(basename $URL)" ] && wget $URL
plundra

3
--recursiveオプションを使用しているため、結果が異なる可能性があります。
ma11hew28

197

-nc--no-clobber新しいファイルがダウンロードされませんようオプションが最善の解決策ではありません。一つは、使用する必要があり-N、サーバが新しいバージョンを持っている場合にのみ、ファイルをダウンロードし、上書きされている代わりに、その正しい答えは次のとおりです。

wget -N http://www.example.com/images/misc/pic.png

その後の有無にかかわらず、-NでのWgetを実行する-r-p、ファイルの新しいコピーをダウンロードするか否かの判断は、ファイルのローカルおよびリモートのタイムスタンプとサイズによって異なります。 -ncと同時に指定することはできません-N

-N--timestamping:タイムスタンプをオンにします。


39
サーバーが適切に構成されてい-Nない場合、失敗する可能性があり、wgetは常に再ダウンロードします。時々-ncより良い解決策です。
ユーザー

2
「サーバーが正しく構成されていない場合」に該当するシナリオは何ですか?
AjayKumarBasuthkar

コピーされた場所からダウンロードするとき、すべてのタイムスタンプを変更します。
Robert

これが最適かどうかは、状況によって異なります。たとえば、リストから最大1600個のファイルをダウンロードしてから、リストを更新してさらにいくつかのファイルを含めています。ファイルは変更されないので、最新バージョンは気にせず、サーバーに既存の1600ファイルの新しいバージョンがないかチェックしたくありません。
JBentley 2017年

2
@AjayKumarBasuthkar:サーバーが新しいファイルをチェックする方法をサポートしていない場合、wget文句を言うでしょうLast-modified header missing。これはまさに概説された状況です。
Piskvorは

23

とにWgetを実行している場合-r-p、しかしなし-N-ndまたは-nc、再ダウンロードするファイルは、新しいコピーは、単に古いものを上書きになります。

その-ncため、追加するとこの動作が防止され、代わりに元のバージョンが保持され、サーバー上の新しいコピーは無視されます。

GNUで詳細をご覧ください。


18

私が探していた答えはhttps://unix.stackexchange.com/a/9557/114862です。

-cローカルファイルのサイズがサーバーバージョンと同じかそれより大きい場合にフラグを使用すると、再ダウンロードを回避できます。


1
これは、-iフラグを指定して一連のファイルをダウンロードする場合に特に便利です。wget -i filelist.txt -c失敗したファイルのリストのダウンロードを再開します。
Trevor
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.