Mac OS X:终端下载文件命令

时间:2020-01-09 10:42:33  来源:igfitidea点击:

在OS X上找不到wget命令。
如何通过Mac OS X bash命令行选项从网上下载文件?
您需要使用称为curl的工具(命令)。
它是使用以下受支持的协议之一从服务器传输数据或者向服务器传输数据的工具

  • 的FTP
  • HTTP
  • HTTPS
  • FTPS
  • POP3
  • SFTP
  • SMTP服务
  • SMTP等。

该命令设计为无需用户干预即可工作。

curl命令语法

语法为:

curl 'url'
curl [option] 'url'
curl -O 'url'
curl -L -O 'url'
curl -o output.file.name.here 'url-here'
curl -o foo.pdf 'http://server1.theitroad.local/foo.pdf'

例子

打开终端,然后输入以下命令以从www.theitroad.local服务器获取pdf格式的Mastering vim:

curl -o mastering-vim.pdf 'http://www.theitroad.local/files/mastering-vi-vim.pdf'

输出示例:
curl命令正在运行

-o选项将输出写入到名为mastering-vim.pdf的文件,而不是屏幕。
您可以跳过-o选项,而使用-O(大写字母O)将输出写入(保存)到本地文件中,该文件名为我们获得的远程文件。
仅使用远程文件的文件部分,路径被切断:

curl -O http://www.theitroad.local/files/mastering-vi-vim.pdf
ls -l *.pdf

如何指定多个URL或者部分URL?

语法为:

# grab files from server1.theitroad.local, server2.theitroad.local, server3.theitroad.local
curl -O http://server{1,2,3}.theitroad.local/
curl -O http://server{1,2,3}.theitroad.local/foo.pdf
## grab latest reports from US, UK, India FTP servers ##
curl -O ftp://intranet.site.{us,uk,in}.lic.com/reports/latest[a-z].tar.gz

您可以使用[]获得字母数字系列的序列。
在此示例中,使用curl命令抓取invoices-1.pdf,invoices-2.pdf,invoices-1000.pdf:

curl -O ftp://ftp.theitroad.local/invoices-[1-1000].pdf

您可以按如下方式获取带有前导零的网址:

curl -O ftp://ftp.theitroad.local/images-[001-300].png

您可以结合多种技术来构建复杂的下载URL结构,如下所示:

curl -O ftp://ftp.theitroad.local/backups-us-[a-z].tar.gz
curl -O http://server1.theitroad.local/music[1997-2000]/series[1-20]/dump{a,b,c,d,e,f}.tar.gz

您可以为范围设置一个计步器,以获取每N个数字或者字母:

##  grab http://server1.theitroad.local/files/foo1.txt, http://www.theitroad.local/files/foo3.txt, http://www.theitroad.local/files/foo5.txt ##
curl -O http://server1.theitroad.local/files/foo[1-10:2].txt  
 
## grab bar-a.pdf, bar-c.pdf, bar-e.pdf, and so on ##
curl -O http://server1.theitroad.local/files/bar-[a-z:2].pdf

显示进度条

您可以强制curl将进度显示为简单的进度条,而不是标准的,更多信息的仪表:

curl -# -O http://www.theitroad.local/files/mastering-vi-vim.pdf

输出示例:

######################################################################## 100.0%

处理网址重定向

对于在下载文件之前可能会进行http重定向的服务器,建议使用以下语法。
其他服务器可能会隐藏实际的下载文件名。

curl -L -o 'file.name.here' 'http://example.com/download.php?fileID=foo'

考虑以下来自sourceforge theitroad托管平台的filezilla下载URL:

## Problems ##
# 1. Long ulr name with special characters in it
# 2. Url hides actual download file name
# 3. Url does http 301 redirect to pick nearest mirror 
# ----------------------------------------------------
http://downloads.sourceforge.net/project/filezilla/FileZilla_Client/3.7.3/FileZilla_3.7.3_i686-apple-darwin9.app.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2F&ts=1381651492&use_mirror=ncu

为避免出现问题,请使用以下语法:

## ****************** TIP *************************************** ##
## a) Put all urls in single-quotes to avoid nasty shell surprises
## b) The -L option follows url redirection
## c) The -o 'file' write file to given name
## ****************** TIP *************************************** ##
curl -L -o 'filezilla.tar.bz2' 'http://downloads.sourceforge.net/project/filezilla/FileZilla_Client/3.7.3/FileZilla_3.7.3_i686-apple-darwin9.app.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2F&ts=1381651492&use_mirror=ncu'

输出示例:
将URL放在单引号中,并使用-L选项接受URL重定向

节省带宽

您可以使用curl支持的一种算法,将'--compressed'选项传递给基于http的url,以请求压缩的响应,并保存未压缩的文档。
如果使用此选项,并且服务器发送了不受支持的编码,则curl将报告错误:

curl -L -O --compressed 'http://server1.theitroad.local/large.report-tab.html'

使用用户名和密码下载文件

语法为:

"安全警报":通过HTTP/FTP进行的任何操作(用户名/密码)都完全可以拦截。
不要使用ftp/http协议传递用户名/密码。

## Insecure examples ##
curl ftp://username:[email protected]:21/path/to/backup.tar.gz
curl http://username:[email protected]/file/path/data.tar.gz
 
## Secure examples SSL/HTTPS/SFTP etc ##
curl --ftp-ssl -u UserName:PassWord ftp://ftp1.theitroad.local:21/backups/07/07/2012/mysql.blog.sql.tar.gz
 
## SFTP example ##
curl -u userNameHere sftp://home1.theitroad.local/~/docs/resume.pdf