リンクをダウンロードしたいcurl
のですが、既存のファイルをスキップしたいのですが。今のところ、私が持っているコード行は、何の問題もなくそれを上書きし続けます:
curl '$url' -o /home/$outputfile &>/dev/null &
これはどのように達成できますか?
リンクをダウンロードしたいcurl
のですが、既存のファイルをスキップしたいのですが。今のところ、私が持っているコード行は、何の問題もなくそれを上書きし続けます:
curl '$url' -o /home/$outputfile &>/dev/null &
これはどのように達成できますか?
ブロックcurl
内に電話をかけることができます。if
if ! [ -f /home/$outputfile ]; then
curl -o /home/$outputfile "url"
fi
また、あなたの例では、$url
一重引用符の中にあることに注意してください。これは、あなたが望むことをしません。比較:
echo '$HOME'
に:
echo "$HOME"
また、スクリプトで役立つオプションがcurl
あります。--silent
curlオプションを使用できます-C -
。このオプションは、壊れたダウンロードを再開するために使用されますが、ファイルがすでに完了している場合はダウンロードをスキップします。の引数-C
は一点鎖線であることに注意してください。不利な点は、curlがまだ一時的にリモートサーバーに接続してファイルサイズを要求することです。
--no-clobber
代わりにwgetを使用してください:
-nc
、--no-clobber
:既存のファイルにダウンロードするダウンロードをスキップします。
例:
wget -nc -q -O "/home/$outputfile" "$url"
とcurl
で使用する場合、はファイルのスキップをサポートしている可能性がありますが、その動作には一貫性がありません。-O
-J
()は基本的に、URLからファイル名を抽出する代わりに、サーバー指定のファイル名を使用するように-J
()オプションに指示します。このように、はサーバーが返すファイル名を実際には知らないため、安全のために既存のファイルを無視する場合があります。--remote-header-name
-O
--remote-name
Content-Disposition
curl
例えば:
$ 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)
ただし、すでに述べたように、その動作は予測不可能であり、すべてのファイルで機能するわけではありません。