ファイルがすでに存在する場合は、ファイルを上書きするようにコマンドラインでカールをどのように指定しますか?

ファイルがすでに存在する場合は、ファイルを上書きするようにコマンドラインでカールをどのように指定しますか?

この構文ではカールを使用します。

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

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

myfile.jpg
myfile-1.jpg

ファイルが存在する場合、そのファイルを上書きするようにCurlにどのように通知できますか?

答え1

-oファイルに書き込むオプションを使用する代わりに、シェルを使用して出力をファイルとして指定します。

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

答え2

合格--clobber。これには使用も含まれます-J

答え3

私は同じ問題があり、サーバー側が返すものに関係なく同じファイル名を再利用したいと思いました。あなたの場合は、次のようにファイル名を取得できますbasename

➸ basename 'http://example.com/myfile.jpg'
myfile.jpg

その後、Bashヘルパー関数を書くことができます。たとえば、次のようになります。

➸ function download { name="$(basename $1)"; curl "$1" > "$name"; }
➸ download 'http://example.com/myfile.jpg'

Content-Dispositionしかし、私の場合、ファイル名はタイトルのあるURLの一部ではありませんでした。 Curlを使用するコマンドラインは次のとおりです。

➸ curl -fSL -R -J -O 'http://example.com/getData.php?arg=1&arg2=...'

必要に応じて無視できます-fSL。サーバー側のリターンケースを処理します302 Redirection。関連フラグは次のとおりです。

  • -Rサーバー側タイムスタンプ用
  • -Jサーバー側の考慮Content-Disposition
  • -O端末にダンプする代わりにダウンロード動作に切り替える

ただし、ファイル名が存在する場合は上書きを拒否します。サーバー側のLast-Modifiedタイムスタンプが最新の場合は上書きしたいと思います。

だから私は次のようなことをするwgetソリューションを使うようになりました。

➸ wget -NS --content-disposition 'http://example.com/getData.php?arg=1&arg2=...'
  • -Nサーバー側のタイムスタンプを確認し、サーバー側に新しいバージョンがある場合にのみ上書きします。
  • --content-dispositionContent-Dispositionタイトルを考慮する必要があります
  • wgetのデフォルトの動作は、サーバー側に提供されているファイル名でダウンロードすることです。

あなたの場合、タイムスタンプを気にしない場合は、次のようになります。

➸ wget -O myfile.jpg http://example.com/myfile.jpg

関連情報