wget -oは失敗時に空のファイルを書き込みます


14

wget "no such address" -o "test.html"と書くと、まずtest.htmlを作成し、失敗した場合は空のままにします。ただし、-oを使用しない場合、ダウンロードが成功するかどうかを待機し、その後のみファイルを書き込みます。

後者の動作を-oにも適用したいのですが、可能ですか?

回答:


17

wget URLが見つからない場合、ゼロ以外の終了ステータスを返すため、失敗時にremoveコマンドを追加できます。

wget "url" -O file || rm -f file

または、一時ファイルを作成し、成功したい場合にのみ移動します:

wget "url" -O /tmp/wget && mv /tmp/wget file

2番目の方法には、障害発生時に既存のファイルを削除しないという利点がありman tempfileますが、複数のインスタンスを並行して実行している場合は、必ず一意の一時名を使用してください(を参照)。


また、--retry-connrefusedを追加すると、最初に空のファイルを防ぐのに役立ちます。
アコム

これがパペットマニフェストのexecで発生している場合、creates => file=> "[-s file]"以外に変更すると、自己修復できるようになります。
akom


4

正しい構文は

wget "url" -O file

大文字のOに注意してください。-oオプションは、ログファイルを書き込むようにwgetに指示します。そのため障害が発生した場合でも常に書き込まれます。


最初は機能していると思っていましたが、機能していないことがわかりました。try wget " host.does.not.exist " -O "emptyFile"エラーは返されますが、emptyFileは作成されます。
akurtser

1
@akurtserそうですね。ファイルを作成しないようにwgetに指示する方法はないと思います。私はこのスレッドを見つけました:mail-archive.com/wget@sunsite.dk/msg08586.htmlで彼らは問題について議論しています。ベースラインは、同じファイルに複数のダウンロードを行うことができるため、wgetはすべてのURLが失敗することを確認できないため、作成されます。
シュンツ氏

おかげで、それは私が書いているbashスクリプトの一部なので、最初に一時ファイルを保存しようとします。これはダウンロードが成功した場合に名前が変更されます。あまりエレガントではありませんが、これ以上良いものは考えられません。
akurtser

1
@akurtser確かに、wgetからの戻りコードを確認できます。「見つからない場合」ファイルを削除できるかどうかがわかります。したがって、一時/名前変更の必要はありません。
シュンツ氏

1
-Oオプションはリダイレクトであり、コンテンツがない場合でも、ダウンロードしたコンテンツをファイルにリダイレクトします。したがって、ダウンロードが失敗した場合でも、ファイルは常に作成されます。

0

ヘルプdoc(wget -h)によると、-spiderオプションを使用してダウンロードをスキップできます(バージョン1.14)。

Download:
  -S,  --server-response         print server response.
       --spider                  don't download anything.

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.