wget:下载文件名

Cra*_*ash 17 linux bash 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]
Run Code Online (Sandbox Code Playgroud)

est*_*est 37

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] }' )
Run Code Online (Sandbox Code Playgroud)

这是正确的版本,因为可能有几个301/302重定向,最后是一个Content-Disposition:标头来设置文件名

根据URL猜测文件名并不总是正确的.

  • 现代简单的方法来实现它:`wget {link} --content-disposition` (6认同)
  • 我喜欢这种方法,但不幸的是Debian衍生物中的awk(例如Ubuntu)不支持`match`中的第3个参数. (2认同)

dog*_*ane 31

使用该basename命令从URL中提取文件名.例如:

url=http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg
filename=$(basename "$url")
wget "$url"
Run Code Online (Sandbox Code Playgroud)

  • 警告:这不适用于包含重定向或动态内容的网址.请参阅est的答案以获得正确的解决方案. (7认同)

pgl*_*pgl 17

您可以在下载前指定文件名,并可-O选择wget:

wget -O myfile.html http://www.example.com/
Run Code Online (Sandbox Code Playgroud)

  • 虽然不像其他答案那么“聪明”,但这种方法实际上具有简单性和可预测性的优点 (3认同)