web-dev-qa-db-ja.com

wget:ダウンロードしたファイル名

私は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]
19
Crazy_Bash

basenameコマンドを使用して、URLからファイル名を抽出します。例えば:

url=http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg
filename=$(basename "$url")
wget "$url"
31
dogbane
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に基​​づいてファイル名を推測することは必ずしも正しいとは限りません。

37
est

ダウンロードする前に、-Oオプションをwgetに指定して、ファイル名を指定するだけです。

wget -O myfile.html http://www.example.com/
17
pgl

次のように名前を明示することができます。

url='http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg'
file=`basename "$url"`
wget "$url" -O "$file"
3
holygeek

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}
2
Ian Mackinnon
~ $ 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'
1
kev

@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"
$
0

変数のどこかにファイルの完全なURLがすでにあると思いますか? bashパラメーター展開を使用してプレフィックスを削除します。

echo ${url##*/}
0
knittl
#!/bin/bash
file=$(wget $1 2>&1 | grep Saving | cut -d ' ' -f 3 | sed -e 's/[^A-Za-z0-9._-]//g')

wgetはすでに保存しているファイル名を教えてくれるので、私はこれが好きです。 sedは、ファイル名以外の文字を削除します。アポストロフィ。

0
PizzaBeer