私はbashのスクリプトを書いていますが、ダウンロードしたファイルの名前をwgetを使用して取得し、その名前を$ stringに入力する必要があります。
たとえば、以下でこのファイルをダウンロードする場合、その名前mxKL17DdgUhcr.jpgを$ stringに配置します。
wget http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg
45439 (44K) [image/jpeg]
Saving to: «mxKL17DdgUhcr.jpg»
100%[===================================================================================================>] 45 439 --.-K/s в 0s
2011-12-20 12:25:33 (388 MB/s) - «mxKL17DdgUhcr.jpg» saved [45439/45439]
basename
コマンドを使用して、URLからファイル名を抽出します。例えば:
url=http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg
filename=$(basename "$url")
wget "$url"
wget --server-response -q -O - "https://very.long/url/here" 2>&1 |
grep "Content-Disposition:" | tail -1 |
awk 'match($0, /filename=(.+)/, f){ print f[1] }' )
複数の301/302リダイレクトがあり、最後にファイル名を設定するためのContent-Disposition:
ヘッダーがある可能性があるため、これは正しいバージョンです。
URLに基づいてファイル名を推測することは必ずしも正しいとは限りません。
ダウンロードする前に、-O
オプションをwget
に指定して、ファイル名を指定するだけです。
wget -O myfile.html http://www.example.com/
次のように名前を明示することができます。
url='http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg'
file=`basename "$url"`
wget "$url" -O "$file"
URLエンコードされたファイル名を処理するには:
URL="http://www.example.com/ESTAD%C3%8DSTICA(2012).pdf"
BASE=$(basename ${URL}) # ESTAD%C3%8DSTICA(2012).pdf
FILE=$(printf '%b' ${BASE//%/\\x}) # ESTADÍSTICA(2012).pdf
wget ${URL}
~ $ URL='http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg'
~ $ echo ${URL##*/}
mxKL17DdgUhcr.jpg
~ $ wget $URL -O ${URL##*/}
--18:34:26-- http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg
=> `mxKL17DdgUhcr.jpg'
@GowthamGopalakrishnanの答えに代わるものは単純です
wget --server-response -q "https://very.long/url/here" 2>&1 | awk -F"filename=" '{if ($2) print $2}'
これは、コンテンツ処理で設定されたファイルの名前を出力するだけです。
例
$ wget --server-response -q https://hostname/filename-that-i-liek.Zip 2>&1 | awk -F"filename=" '{if ($2) print $2}'
"filename-that-i-liek.Zip"
$
変数のどこかにファイルの完全なURLがすでにあると思いますか? bashパラメーター展開を使用してプレフィックスを削除します。
echo ${url##*/}
#!/bin/bash
file=$(wget $1 2>&1 | grep Saving | cut -d ' ' -f 3 | sed -e 's/[^A-Za-z0-9._-]//g')
wget
はすでに保存しているファイル名を教えてくれるので、私はこれが好きです。 sedは、ファイル名以外の文字を削除します。アポストロフィ。