我正在为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]
答案 0 :(得分:36)
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:
标头来设置文件名
根据网址猜测文件名并不总是正确的。
答案 1 :(得分:28)
使用basename
命令从网址中提取文件名。例如:
url=http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg
filename=$(basename "$url")
wget "$url"
答案 2 :(得分:16)
您可以在下载前指定文件名,-O
选项wget
:
wget -O myfile.html http://www.example.com/
答案 3 :(得分:3)
你可以明确地说出这样的名字:
url='http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg'
file=`basename "$url"`
wget "$url" -O "$file"
答案 4 :(得分:2)
处理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}
答案 5 :(得分:1)
~ $ 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'
答案 6 :(得分:0)
我猜你已经在变量的某个地方拥有了该文件的完整URL?使用bash参数扩展来去除前缀:
echo ${url##*/}
答案 7 :(得分:0)
@Gowtham Gopalakrishnan的答案的替代方法 很简单
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"
$
答案 8 :(得分:0)
#!/bin/bash
file=$(wget $1 2>&1 | grep Saving | cut -d ' ' -f 3 | sed -e 's/[^A-Za-z0-9._-]//g')
我喜欢这样,因为wget
已经告诉您要保存的文件名。 sed去除非文件名字符,即。撇号。
答案 9 :(得分:0)
正如@PizzaBeer 所提到的,wget
表示他将保存文件的位置。这很重要,因为它可以通过在文件名末尾添加数字来确保不会覆盖现有文件。
所以这是我使用 grep
缩小好线的解决方案(需要 --line-buffered
,因为 wget
的工作方式,请参阅 here)和 sed
提取文件名。
wget --content-disposition $1 2>&1 | grep "Saving to" --line-buffered | sed -r 's/Saving to: ‘(.*)’/\1/'
您可以将其存储在一个变量中,该变量将在下载结束时填充。
答案 10 :(得分:-2)
所以你想把文件/图像名称作为参数
试试这个
echo -n "Give me the name of file in http://pics.sitename.com/images/191211/ :"
read $string
sudo wget http://pics.sitename.com/images/191211/$string ;;
我认为这可以帮到你