29

リンクをダウンロードしたいcurlのですが、既存のファイルをスキップしたいのですが。今のところ、私が持っているコード行は、何の問題もなくそれを上書きし続けます:

curl '$url' -o /home/$outputfile &>/dev/null &

これはどのように達成できますか?

4

4 に答える 4

28

ブロックcurl内に電話をかけることができます。if

if ! [ -f /home/$outputfile ]; then
  curl -o /home/$outputfile "url"
fi

また、あなたの例では、$url一重引用符の中にあることに注意してください。これは、あなたが望むことをしません。比較:

echo '$HOME'

に:

echo "$HOME"

また、スクリプトで役立つオプションがcurlあります。--silent

于 2012-08-08T01:25:43.267 に答える
27

curlオプションを使用できます-C -。このオプションは、壊れたダウンロードを再開するために使用されますが、ファイルがすでに完了している場合はダウンロードをスキップします。の引数-Cは一点鎖線であることに注意してください。不利な点は、curlがまだ一時的にリモートサーバーに接続してファイルサイズを要求することです。

于 2017-11-10T16:14:51.060 に答える
16

--no-clobber代わりにwgetを使用してください:

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

例:

wget -nc -q -O "/home/$outputfile" "$url" 
于 2012-08-08T01:15:48.877 に答える
2

curlで使用する場合、はファイルのスキップをサポートしている可能性がありますが、その動作には一貫性がありません。-O-J

()は基本的に、URLからファイル名を抽出する代わりに、サーバー指定のファイル名を使用するように-J()オプションに指示します。このように、はサーバーが返すファイル名を実際には知らないため、安全のために既存のファイルを無視する場合があります。--remote-header-name-O--remote-nameContent-Dispositioncurl

出典:Re:-J「上書きを拒否しています...」

例えば:

$ curl -LJO -H 'Accept: application/octet-stream' 'https://api.github.com/repos/x/y/releases/assets/12345
Warning: Refusing to overwrite my_file.bin: File 
Warning: exists
curl: (23) Failed writing body (0 != 16384)

ただし、すでに述べたように、その動作は予測不可能であり、すべてのファイルで機能するわけではありません。

于 2016-06-17T02:02:18.433 に答える