シェルスクリプトのURLからダウンロードする前のファイル名の予測

シェルスクリプトのURLからダウンロードする前のファイル名の予測

リストからファイルをダウンロードし、wget重要でないエラーが発生した場合(嵐の間に不安定なWIFIが原因で)、自動的に再開するために使用するシェルスクリプトがあります。

問題は、ファイルに書き込んで完了したら.part拡張子を削除したいということですfilename.part(上書きなどはこの時点で処理されます)。これはのような単純なURLでうまくいきhttp://myserver.org/myfile.docますがhttp://myserver.org/index.php?file_id=foo。 (私の方法はあなたがindex.php.part望む結果の代わりに書こうとします)

wgetは自動的に「最終」ファイル名を取得して作成することができますが、他の拡張子として保存するオプションは提供されず、-O制御できません。

だから私の質問は、名前は同じですが、拡張子が追加されたファイルを作成できるように、ダウンロードURLから「最終」ファイル名を取得する標準的な方法(またはツール)はありますか? (たとえば-Owgetまたはカールに使用されます)-owget $URL -O "$URL_GUESSED_FILENAME.part"

私のツールはwgetまたはカールです。私は現在wgetを使用していますが、好むものはありません。または、Pythonでこれを行う方法がある場合は、その方法も開いています。

答え1

http://myserver.org/index.php?file_id=fooWgetは、サーバーが提供するファイル名(たとえば)に保存できますfoo.ext。通常、これにはwgetオプションが必要です--content-disposition。ダウンロードするには、-O foo.ext.partまず内容を理解する必要があります。ファイル名を含むhttpヘッダーを最初にダウンロードするだけです。

wgetを使用すると、次のように対応するヘッダー行を取得できます。

wget --spider --server-response URL 2>&1 | grep -i content-disposition

ファイル名を抽出するには、ヘッダーの簡単な解析を行う必要があります。もちろんこれはオプションです。それが存在しない場合、あなたは幸運ではなく、wgetはに依存しますindex.php。それからあなたもそれを使うことができます-O

関連情報