it-swarm-ja.com

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

Wget "no such address" -o "test.html"と書くと、最初にtest.htmlが作成され、失敗した場合は空のままになります。ただし、-oを使用しない場合は、ダウンロードが成功するかどうかを確認してから、ファイルが書き込まれます。

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

15
akurtser

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

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

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

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

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

17
Ian Mackinnon

コメントに書かれているように、wget -Oシェルリダイレクトに似ています エラーに関係なく常にファイルに書き込みます。

代わりにcurl -fを使用できます。

curl -f http://nonexistent/file.jpg -o localfile.jpg

ファイルのフェッチ中にエラーが発生した場合、ローカルファイルにはアクセスしません。

14
cweiske

正しい構文は

wget "url" -O file

大文字のOに注意してください。-oオプションはwgetに書き込みを指示しますログファイル、それが失敗しても常に書き込まれる理由です。

4
Mr Shunz

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

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

0
rocky qi