私はこの構文でcurlを使用しています:
curl -o myfile.jpg http://mysite.com/myfile.jpg
このコマンドを2回実行すると、2つのファイルが取得されます。
myfile.jpg
myfile-1.jpg
ファイルが存在する場合、上書きするようにCURLに指示するにはどうすればよいですか?
私はこの構文でcurlを使用しています:
curl -o myfile.jpg http://mysite.com/myfile.jpg
このコマンドを2回実行すると、2つのファイルが取得されます。
myfile.jpg
myfile-1.jpg
ファイルが存在する場合、上書きするようにCURLに指示するにはどうすればよいですか?
回答:
使用する:
curl http://mysite.com/myfile.jpg > myfile.jpg
noclobber
オプションが有効になっていないことを確認してください(set +o noclobber
)。
私は同じ問題に遭遇し、サーバー側が与えるものは何でも同じファイル名を再利用したいのですが、あなたの場合、ファイル名は basename
➸ basename 'http://mysite.com/myfile.jpg'
myfile.jpg
次に、次のようなヘルパーbash関数を記述できます。
➸ function download { name="$(basename $1)"; curl "$1" > "$name"; }
➸ download 'http://mysite.com/myfile.jpg'
しかし、私の場合、ファイル名はURLの一部でもなく、content-dispositionが付属しています。カールでコマンドラインは
$ curl -fSL -R -J -O 'http://some-site.com/getData.php?arg=1&arg2=...'
-fSL
サーバー側が302リダイレクションを提供する場合は、それが処理するものを無視できます。-R
サーバ側のタイムスタンプのために、-J
サーバ側を考慮するContent-Disposition
と、-O
代わりに端末にダンプのダウンロード動作に切り替えること。
ただし、ファイル名が存在する場合は、上書きを拒否されます。サーバー側のLast-Modified
タイムスタンプが新しい場合は上書きしたいのですが。
最終的には、それが可能なwgetソリューションになります。
$ wget -NS --content-disposition 'http://some-site.com/getData.php?arg=1&arg2=...'
これ-N
は、サーバー側のtiemstampをチェックして、サーバー側に新しいバージョンがある場合にのみ上書きすることです。ヘッダー--content-disposition
を検討することContent-Disposition
です。wgetのデフォルトの動作は、サーバー側から指定されたファイル名にダウンロードすることです。
あなたの場合、タイムスタンプを気にしないのであれば、それはただです
$ wget -O myfile.jpg http://mysite.com/myfile.jpg
curl
システムのどのバージョンですか?