2012-08-08 4 views

答えて

17

あなただけifブロック内curlにお電話を置くことができます:

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

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

echo '$HOME' 

へ:また

echo "$HOME" 

curlは、スクリプトに有用であることができ--silentオプションがあります。

+0

非常に助けてください、それを指摘していただきありがとうございます。私はPHPを介してこれをやっている、私はどのようにPHPを介してif文を実行することができますか? – thevoipman

+0

私は頭の上からPHPを知りませんが、ファイルが存在するかどうかを確認するための比較的単純なメカニズムがあると確信しています。 –

4

利用のwget:

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

例:

wget -nc -q -O "/home/$outputfile" "$url" 
+1

wgetの使い方について教えてください。 – thevoipman

+2

最初はwgetを使用していましたが、ダウンロードしたファイルにダウンロードしたときのタイムスタンプが必要なので、カールに変更しました。 wgetを使用すると、新しいタイムスタンプが生成されるのではなく、コピーされたソースからのタイムスタンプになります。どのように私は新しいタイムスタンプを生成するwgetを持っていますか? – thevoipman

+0

'-N'はwgetのタイムスタンプをオフにします。 –

1

-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) 

はしかし、その行動は予測不可能であり、それはすべてのファイルに対しては機能しません。

2

カールオプション-C -を使用できます。このオプションは、破損したダウンロードを再開するために使用されますが、ファイルがすでに完了している場合はダウンロードをスキップします。 -Cへの引数はダッシュ記号であることに注意してください。欠点は、カールが依然としてリモートサーバーに短時間接触してファイルサイズを要求していることです。