如何让CURL保存到不同的目录?

6
我需要能够传递文件下载的URL以及保存文件的路径。
我认为这与CURL的-O和-o有关,但我似乎无法弄清楚。
例如,以下是我目前在bash脚本中使用的内容:
#!/bin/sh

getsrc(){
    curl -O $1
}

getsrc http://www.apache.org/dist/ant/binaries/apache-ant-1.7.1-bin.tar.gz

我该如何修改curl语句以便实现这个功能。
getsrc http://www.apache.org/dist/ant/binaries/apache-ant-1.7.1-bin.tar.gz /usr/local

并将其保存到 /usr/local?
2个回答

7
如果这是一段脚本,你应该确保自己已经准备好应对任何意外情况:
getsrc() {
    ( cd "$2" && curl -O "$1" )
}

这意味着需要引用您的参数,以防它们包含shell元字符,例如问号、星号、空格、制表符、换行符等。

这还意味着在cdcurl命令之间使用&&运算符,以防目标目录不存在(如果不使用它,curl仍会下载但将文件放置在错误的位置!)

该函数接受两个参数:

  • 应下载数据的URL。
  • 本地路径,指定数据应存储在哪里(使用基于URL的文件名)。

要指定本地文件名而不是路径,请使用更简单的:

getsrc() {
    curl "$1" > "$2"
}

6

嗯……你可能想要做的是

getsrc(){
    ( cd $2 > /dev/null ; curl -O $1 ; ) 
}

-O(大写字母O)表示将文件存储在本地,并使用类似于远程文件的名称,但忽略远程路径组件。要能够存储到特定目录中,最简单的方法是进入该目录...我会在子shell中执行此操作,因此目录更改不会传播。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接