URLに基​​づいてwgetまたはcurlの出力をカスタムファイル名に書き込む


12

たとえば、リンクがありhttp://www.abc.com/123/def/ghi/jkl.mnoます。wgetor curlを使用してダウンロードし、出力ファイルの名前をとして取得しますdef_ghi_jkl.mno。ここで、部分def_ghiはリンクから取得されます。

このwgetコマンドをスクリプトに追加して、複数のファイルをダウンロードし、出力ファイル名を明示的に指定できないようにします。

回答:


15

curlには、 ファイル名の出力がの代わりに書き込まれることを示す単一の引数を取る-o--outputオプションがありますstdout。URLの要素を使用し{}たり[]、URL内の要素を囲んだりする場合(通常は複数のドキュメントを取得するために使用されます)、#ファイル名指定子に数字を続けて使用できます。このような各変数は、取得されるURLに対応する文字列に置き換えられます。複数のファイルを取得するには、内にトークンのカンマ区切りリストを追加します{}。取得するURLの部分が連番である場合は、で範囲を指定できます[]

例:

  curl http://www.abc.com/123/{def}/{ghi}/{jkl}.mno -o '#1_#2_#3.mno'

オプション引数を囲む引用符に注意してください(ファイル名が展開された変数のいずれかで始まる場合を除き、必要ありません)。これにより、出力ファイルが生成されますdef_ghi_jkl.mno

  curl http://www.abc.com/123/{def}/{ghi}/{jkl,pqr,stu}.mno -o '#1_#2_#3.mno'

これは、出力ファイルをもたらすべきであるdef_ghi_jkl.mnodef_ghi_pqr.mnodef_ghi_stu.mno

 curl http://www.abc.com/123/{def}/{ghi}/[1-3].mno -o '#1_#2_#3.mno'

これは、出力ファイルになるはずですdef_ghi_1.mnodef_ghi_2.mnodef_ghi_3.mno


2

wgetには、保存するファイルの名前を指定できるスイッチ-O(長い形式--output-document)があります。(おそらくcurlには似たようなものがあります。)そのため、次のことができます。

wget -O def_ghi_jkl.mno http://www.abc.com/123/def/ghi/jkl.mno

そして、あなたが望むことをします。

このネーミングスキームを自動化する場合は、おそらくwgetのラッパーを作成できますが、防弾を取得するのはかなり難しく、間違いなくこの答えの範囲外です。(明示的なURLからダウンロードされた単一のファイルの単純なケースは、正しく取得するのはそれほど難しいことではありませんが、wgetの唯一の操作モードではありません。コマンドラインで。)

-Oは、指定されたファイルにwget自身の出力-o書き込むとまったく同じではないことに注意してください。


これはスクリプトの一部であり、そのようなファイル名を明示的に指定しても機能しません。
gvz

@ user47567どうして?wgetまたはcurlがスクリプトから呼び出されているという事実は、実際的ではありませんか?(実際、どのような答えが機能するかについてそのような制約がある場合、その情報は最初から質問に実際に入るべきです。)
CVn

0

ここにいくつかのバッシュ置換のトリックがあります

link="http://www.abc.com/123/def/ghi/jkl.mno"
OutputFile=$( echo ${link:23: 23}| tr "/" "_" )
echo $OutputFile
def_ghi_jkl.mno

{$link:23: 23}「削除されますhttp://www.abc.com/123/」それはあるが${parameter:offset:length}、その後、tr置き換えられます/_

したがって、wgetまたはcurlで簡単に使用できます

wget $link  -O $OutputFile

また、awkを使用できます。これにより、入力文字列から最後の3つのファイルが抽出されます。

OutputFile=$( echo $link | awk -F/ 'BEGIN{OFS="_"}{ print $( NF-2),$(NF - 1 ),$NF}' )

0

必要なファイル名をwget単独で取得することはできないため、シェルスクリプトで処理する必要があります。

$ url='http://www.example.com/123/def/ghi/jkl.mno'
$ outFile=$(echo "$url" | cut -d /  -f 5- | tr / _)
$ echo $outFile 
def_ghi_jkl.mno
$ wget "$url" -O "$outFile"

または、1行にしたい場合:

wget "$url" -O "$(echo "$url" | cut -d /  -f 5- | tr / _)"

0

カールを好む場合、最も直接的な方法は次のとおりです。

curl -L -o <filename> "https://drive.google.com/uc?export=download&id=<file id>"

filename:ダウンロードしたファイルの名前

ファイルID:https://drive.google.com/file/d/ file id / viewの形式のGoogleドライブのWebビュー内のファイルのID

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.