从列表中下载多个文件
在实际场景中,你经常需要下载多个文件。手动输入每个 wget
命令会非常低效。幸运的是,wget
可以从列表中下载多个文件,这非常适合自动化操作。
创建包含 URL 的文件
首先,让我们创建一个文本文件,其中包含我们要下载的文件的 URL:
cd ~/project/download_resources
echo "https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz" > download_list.txt
echo "https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz" >> download_list.txt
echo "https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz" >> download_list.txt
在这些命令中:
- 第一个
echo
命令创建一个名为 download_list.txt
的新文件,并添加第一个 URL
- 后续的
echo
命令使用 >>
(双重定向)将额外的 URL 追加到文件中
让我们检查文件的内容,确保其正确:
cat download_list.txt
你应该看到三个 URL,每个 URL 占一行:
https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz
使用 wget 读取输入文件
现在,我们可以使用 wget
的 -i
选项从文件中读取 URL 并下载所有文件:
wget -i download_list.txt
这个命令告诉 wget
从 download_list.txt
中读取 URL,并按顺序下载每个文件。你会看到每个下载的输出,类似于下载单个文件时的输出:
--2024-01-10 10:30:51-- https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
Resolving www.python.org (www.python.org)... 151.101.76.223, 2a04:4e42:12::223
Connecting to www.python.org (www.python.org)|151.101.76.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22808518 (22M) [application/octet-stream]
Saving to: 'Python-3.7.0.tgz'
Python-3.7.0.tgz 100%[=============================================================>] 21.75M 25.9MB/s in 0.8s
2024-01-10 10:30:52 (25.9 MB/s) - 'Python-3.7.0.tgz' saved [22808518/22808518]
--2024-01-10 10:30:52-- https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
...
验证下载的文件
下载完成后,让我们验证所有文件是否都已正确下载:
ls -lh Python-3.7.*
你应该看到我们从列表中下载的三个 Python 3.7.x 文件:
-rw-r--r-- 1 labex labex 22M Jan 10 10:30 Python-3.7.0.tgz
-rw-r--r-- 1 labex labex 22M Jan 10 10:30 Python-3.7.1.tgz
-rw-r--r-- 1 labex labex 22M Jan 10 10:31 Python-3.7.2.tgz
创建批量下载脚本
为了方便以后使用,让我们创建一个简单的 shell 脚本,用于从列表中下载文件。这展示了如何在自动化操作中使用 wget
:
cd ~/project/download_resources
nano batch_download.sh
在文件中输入以下内容:
#!/bin/bash
## A simple script to download files from a list
if [ -f "$1" ]; then
echo "Downloading files from list: $1"
wget -i "$1"
else
echo "Error: File $1 not found"
exit 1
fi
按 Ctrl+O
保存文件,然后按 Enter
,再按 Ctrl+X
退出。
使脚本可执行:
chmod +x batch_download.sh
现在,你可以在将来使用这个脚本从任何列表中下载文件:
./batch_download.sh download_list.txt
这个命令的功能与我们之前的 wget -i download_list.txt
命令相同,但它被封装在一个脚本中,你可以重复使用。