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?

4

2 回答 2

7

如果这是一个脚本,您应该确保您已准备好应对任何意外情况:

getsrc() {
    ( cd "$2" && curl -O "$1" )
}

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

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

该函数有两个参数:

  • 应下载的数据的 URL。
  • 应存储数据的本地 PATH(使用基于 URL 的文件名)

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

getsrc() {
    curl "$1" > "$2"
}
于 2009-04-10T06:17:10.897 回答
6

嗯...你可能想要做的是

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

-O(大写O)表示存储在本地命名为远程文件,但忽略远程路径组件。为了能够存储在特定目录中,最简单的方法是 cd 到它...我在子 shell 中执行此操作,因此目录更改不会传播

于 2009-04-09T23:29:38.957 回答