たとえば、リンクhttp://www.abc.com/123/def/ghi/jkl.mno
があります。 wget
またはcurl
を使用してダウンロードし、出力ファイルの名前をdef_ghi_jkl.mno
として取得します。ここで、def_ghi
の部分はリンクから取得されます。
このwget
コマンドをスクリプトに入れて、複数のファイルをダウンロードし、出力ファイル名を明示的に指定できないようにします。
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.mno
、def_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.mno
、def_ghi_2.mno
、def_ghi_3.mno
が生成されます。
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自身の出力を書き込みます。
必要なファイル名は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 / _)"
カールを好む場合、最も直接的な方法は次のとおりです。
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 /ビュー
これがいくつかの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}' )