使用curl命令将文件保存到特定文件夹

问题描述 投票:0回答:10

在 shell 脚本中,我想从某个 URL 下载文件并将其保存到特定文件夹。我应该使用什么特定的 CLI 标志来使用

curl
命令将文件下载到特定文件夹,或者我如何获得该结果?

bash shell curl directory
10个回答
432
投票

我不认为你可以给出curl的路径,但你可以CD到该位置,下载并CD回来。

cd target/path && { curl -O URL ; cd -; }

或者使用子shell。

(cd target/path && curl -O URL)

两种方式仅在路径存在时才下载。

-O
保留远程文件名。下载后会回到原来的位置。

如果需要显式设置文件名,可以使用小

-o
选项:

curl -o target/path/filename URL

123
投票

--output-dir
选项自curl 7.73.0起可用:

curl --create-dirs -O --output-dir /tmp/receipes https://example.com/pancakes.jpg

30
投票

curl
没有此选项(也无需指定文件名),但
wget
有。该目录可以是相对的或绝对的。另外,如果该目录不存在,则会自动创建。

wget -P relative/dir "$url"

wget -P /absolute/dir "$url"

14
投票

它对我有用:

curl http://centos.mirror.constant.com/8-stream/isos/aarch64/CentOS-Stream-8-aarch64-20210916-boot.iso --output ~/Downloads/centos.iso 

地点:

--output
允许我设置我想要放置的文件和扩展文件的路径和命名。


9
投票

使用重定向:

这可以将

curl
下载的文件放入指定路径:

curl https://download.test.com/test.zip > /tmp/test.zip

显然“test.zip”是您想要标记重定向文件的任意名称 - 可以是相同的名称或不同的名称。

我实际上更喜欢@oderibas解决方案,但这将使您解决这个问题,直到您的发行版支持curl版本7.73.0或更高版本-


5
投票

对于 Windows 中的 powershell,您可以将 相对路径 + 文件名 添加到

--output
标志:

curl -L  http://github.com/GorvGoyl/Notion-Boost-browser-extension/archive/master.zip --output build_firefox/master-repo.zip

这里build_firefox是相对文件夹。


2
投票

使用wget

wget -P /your/absolut/path "https://jdbc.postgresql.org/download/postgresql-42.3.3.jar"

0
投票

对于 Windows,在 PowerShell 中,

curl
是 cmdlet
Invoke-WebRequest
的别名,并且以下语法有效:

curl "url" -OutFile file_name.ext

例如:

curl "https://airflow.apache.org/docs/apache-airflow/2.2.5/docker-compose.yaml" -OutFile docker-compose.yaml

来源:https://krypted.com/windows-server/its-not-wget-or-curl-its-iwr-in-windows/


0
投票

这里是一个使用 Batch 从 URL 创建安全文件名并将其保存到名为 tmp/ 的文件夹的示例。我确实认为这在 Windows 或 Linux Curl 版本上不是一个选项,这很奇怪。

@echo off
set url=%1%

for /r %%f in (%url%) do (
    set url=%%~nxf.txt
    curl --create-dirs -L -v -o tmp/%%~nxf.txt %url%
)

上面的批处理文件将接受单个输入、一个 URL,并根据该 url 创建一个文件名。如果未指定文件名,它将保存为tmp/.txt。所以这并没有为您完成所有工作,但它可以在 Windows 中完成工作。


0
投票

一般有两种方法,要么将文件名按原样输出到目录中(顶部两个),要么指定相对或绝对路径(底部两个)。这里的两个示例都使用

--location
-L
标志来跟踪重定向。否则,他们可能会失败。

### Writing to a directory

# long version
curl --location https://some.url/some.file --remote-name --output-dir some/dir/

# short version
curl -L https://some.url/some.file -O --output-dir some/dir/

### Writing to a file path

# long version
curl --location https://some.url/some.file --output some/dir/some.file

# short version
curl -L https://some.url/some.file -o some/dir/some.file

请注意,前两个需要

--remote-name
-O
标志,否则它们将失败,只需将输出打印到 shell。

享受吧!

© www.soinside.com 2019 - 2024. All rights reserved.