curl -O:为什么无法下载文件特定目录?

curl -O:为什么无法下载文件特定目录?

条目man curlcurl -O

如果您希望将文件保存在不同的目录中,请确保在使用 -O, --remote-name 标志调用curl 之前更改当前工作目录!

为什么无法将文件下载到特定目录而必须将cd /example文件下载到特定目录?

我知道用这种方式是可能的wget

wget -P /example https://example.com/file

但我确实想知道为什么它似乎不与curl.

答案1

为什么无法将文件下载到特定目录,而必须执行 cd /example 才能将文件下载到特定目录?

因为卷曲就是这样设计的。因为它是自由软件,您可以下载它的源代码(也许使用git clone https://github.com/curl/curl.git)并研究它。你会发现目录(2)其中从未使用系统调用(它仅出现在用 Perl 编码的测试脚本中)。

如果您不想cd在使用之前在 shell 中显式显示curl,您可以使用其他内容,或者修补curl源代码以添加这样的选项(例如,您可以改进其代码以接受某些--chdir 目录名程序选项,然后调用chdir 系统调用;在我看来,这不值得付出努力)。请记住,每个过程有它的自己的 工作目录(从其父进程继承)。也可以看看凭证(7)并阅读一些 Linux 编程书籍(可能是旧的,但可以免费下载,碱性磷酸酶;还简介(2)&系统调用(2)

当然,您可以curl仅使用绝对路径(考虑使用真实路径(1)在你的 shell 脚本中,或者真实路径(3)在你的 C 程序中,得到一个)..

您还可以更简单地包含curl一些外壳脚本做你想做的事;也许一些incurl 脚本就像这样简单:

#!/bin/sh
# this is your incurl shell script
cd "$1"
shift
exec curl "$@"

您将使用例如 with (从该 URLincurl /tmp/ -O foo http://example.com/path/foobar.txt 获取一些内容)。/tmp/foo

您也可以使用库卷曲图书馆,也许来自一些脚本语言(喜欢诡计,Python,卢阿,珀尔等...),或者来自用编译器实现的语言编写的程序(Rust、Go、C++、C、Ocaml...)。您甚至可以找到其他 HTTP 客户端库(以及 HTTP 服务器库)。

至于为什么curl设计师没有想到更多的功能、花哨的东西,请阅读有关Unix哲学curl是一个命令行软件,它只做一件事,但做得很好。您将与其他实用程序组合或包装它(可能与incurl上面的脚本一样简单)以获得更多功能。可悲的是,curl也不能为你做早晨咖啡。

附言。我假设您正在使用一些 POSIX 或类 Unix 操作系统,例如 Linux、MacOSX、AIX……

答案2

这是因为它就是这样curl设计的。

尽管如此,您仍然可以通过 shell 重定向实现对输出目录的写入。例子:

$ curl http://example.com/file > /path/to/destination/file

相关内容