curl
にリンクをダウンロードしますが、すでに存在するファイルをスキップします。今のコード行は、それを上書きし続けます。カールをダウンロードする際に既存のファイルをスキップするにはどうすればよいですか?
curl '$url' -o /home/$outputfile &>/dev/null &
これはどのように達成できますか?代わりにと
curl
にリンクをダウンロードしますが、すでに存在するファイルをスキップします。今のコード行は、それを上書きし続けます。カールをダウンロードする際に既存のファイルをスキップするにはどうすればよいですか?
curl '$url' -o /home/$outputfile &>/dev/null &
これはどのように達成できますか?代わりにと
あなただけif
ブロック内curl
にお電話を置くことができます:
if ! [ -f /home/$outputfile ]; then
curl -o /home/$outputfile "url"
fi
はまた、あなたの例では、単一引用符の内側$url
を持っていることに注意してくださいあなたが望むことはしません。比較:
echo '$HOME'
へ:また
echo "$HOME"
、curl
は、スクリプトに有用であることができ--silent
オプションがあります。
利用のwget:
-nc
、:既存のファイルをダウンロードしますダウンロードをスキップします。
例:
wget -nc -q -O "/home/$outputfile" "$url"
wgetの使い方について教えてください。 – thevoipman
最初はwgetを使用していましたが、ダウンロードしたファイルにダウンロードしたときのタイムスタンプが必要なので、カールに変更しました。 wgetを使用すると、新しいタイムスタンプが生成されるのではなく、コピーされたソースからのタイムスタンプになります。どのように私は新しいタイムスタンプを生成するwgetを持っていますか? – thevoipman
'-N'はwgetのタイムスタンプをオフにします。 –
-O
と-J
を使用してファイルをスキップすると、curl
がファイルをスキップすることがありますが、その動作には一貫性がありません。
基本的代わりにURLからファイル名を抽出するサーバが指定Content-Disposition
ファイル名を使用する-O
(--remote-name
)オプションを指示-J
(--remote-header-name
)。このようにして、curl
はサーバが返すファイル名を実際には知りませんので、安全上の理由から既存のファイルを無視することがあります。
出典:たとえばRe: -J "Refusing to overwrite..."
:既に述べたように
$ 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)
はしかし、その行動は予測不可能であり、それはすべてのファイルに対しては機能しません。
カールオプション-C -
を使用できます。このオプションは、破損したダウンロードを再開するために使用されますが、ファイルがすでに完了している場合はダウンロードをスキップします。 -C
への引数はダッシュ記号であることに注意してください。欠点は、カールが依然としてリモートサーバーに短時間接触してファイルサイズを要求していることです。
非常に助けてください、それを指摘していただきありがとうございます。私はPHPを介してこれをやっている、私はどのようにPHPを介してif文を実行することができますか? – thevoipman
私は頭の上からPHPを知りませんが、ファイルが存在するかどうかを確認するための比較的単純なメカニズムがあると確信しています。 –