web-dev-qa-db-ja.com

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

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

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

12
gvz

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

例:

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

オプション引数を囲む引用符に注意してください(ファイル名が展開された変数の1つで始まる場合を除き、必要ありません)。これにより、出力ファイル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.mnoおよびdef_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が生成されます。

15
Thomas Nyman

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

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

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

この命名方式を自動化したい場合は、おそらくwgetのラッパーを作成することができますが、防弾を得るのはかなり難しく、この回答の範囲外です。 (明示的なURLからダウンロードされた単一のファイルの単純なケースは、正しく理解することはそれほど難しくありませんが、これはwgetの唯一の操作モードではありません。これをわずかに簡単にする1つのケースに名前を付けるには、複数のURLを指定できます。コマンドラインで。)

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

2
a CVn

必要なファイル名は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
Volker Siegel

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

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

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

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

0
Agile Bean

これがいくつかのBash Substitutionトリックです

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
Rahul Patil