curlが(コマンドラインを介して)ファイルが既に存在する場合に上書きするように指定するにはどうすればよいですか?


11

私はこの構文でcurlを使用しています:

curl -o myfile.jpg http://mysite.com/myfile.jpg

このコマンドを2回実行すると、2つのファイルが取得されます。

myfile.jpg
myfile-1.jpg

ファイルが存在する場合、上書きするようにCURLに指示するにはどうすればよいですか?


4
再現できません:どのcurlシステムのどのバージョンですか?
enzotib 2011

回答:


21

使用する:

curl http://mysite.com/myfile.jpg > myfile.jpg

2
また、事前にnoclobberオプションが有効になっていないことを確認してください(set +o noclobber)。
rozcietrzewiacz

0

私は同じ問題に遭遇し、サーバー側が与えるものは何でも同じファイル名を再利用したいのですが、あなたの場合、ファイル名は 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.