この構文ではカールを使用します。
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-disposition
Content-Disposition
タイトルを考慮する必要があります- wgetのデフォルトの動作は、サーバー側に提供されているファイル名でダウンロードすることです。
あなたの場合、タイムスタンプを気にしない場合は、次のようになります。
➸ wget -O myfile.jpg http://example.com/myfile.jpg