在 shell 脚本中,我想从某个 URL 下载文件并将其保存到特定文件夹。我应该使用什么特定的 CLI 标志来使用
curl
命令将文件下载到特定文件夹,或者我如何获得该结果?
我不认为你可以给出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
--output-dir
选项自curl 7.73.0起可用:
curl --create-dirs -O --output-dir /tmp/receipes https://example.com/pancakes.jpg
curl
没有此选项(也无需指定文件名),但 wget
有。该目录可以是相对的或绝对的。另外,如果该目录不存在,则会自动创建。
wget -P relative/dir "$url"
wget -P /absolute/dir "$url"
它对我有用:
curl http://centos.mirror.constant.com/8-stream/isos/aarch64/CentOS-Stream-8-aarch64-20210916-boot.iso --output ~/Downloads/centos.iso
地点:
--output
允许我设置我想要放置的文件和扩展文件的路径和命名。
这可以将
curl
下载的文件放入指定路径:
curl https://download.test.com/test.zip > /tmp/test.zip
显然“test.zip”是您想要标记重定向文件的任意名称 - 可以是相同的名称或不同的名称。
我实际上更喜欢@oderibas解决方案,但这将使您解决这个问题,直到您的发行版支持curl版本7.73.0或更高版本-
对于 Windows 中的 powershell,您可以将 相对路径 + 文件名 添加到
--output
标志:
curl -L http://github.com/GorvGoyl/Notion-Boost-browser-extension/archive/master.zip --output build_firefox/master-repo.zip
这里build_firefox是相对文件夹。
使用wget
wget -P /your/absolut/path "https://jdbc.postgresql.org/download/postgresql-42.3.3.jar"
对于 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/
这里是一个使用 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 中完成工作。
一般有两种方法,要么将文件名按原样输出到目录中(顶部两个),要么指定相对或绝对路径(底部两个)。这里的两个示例都使用
--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。
享受吧!