我有大约 1000 个文本文件。0001.txt 0002.txt .....到 1000.txt
每个文本文件都有 50 个直接图像链接。我如何批量下载名为 0001、0002 的相应文件夹中的这些图像。
还重命名文件以保持下载的顺序 1 到 50。
示例链接 https://xyz点 com/photos/hdi3bfkdn497ndbdj3.jpg . . .
答案1
#! /usr/bin/env bash
if [ -z $1 ] || egrep -qv '^https?:\/\/[^[:space:]]+' $1; then
echo "Usage: $0 FILE"
echo "FILE must be a newline-separated list of URLs."
exit
fi
INPUT_FILE=$1
OUTPUT_DIRECTORY="${INPUT_FILE%.*}"
mkdir -p $OUTPUT_DIRECTORY
i=1
while read URL; do
FILENAME="${URL##*/}"
curl -L $URL > "${OUTPUT_DIRECTORY}/${i}_${FILENAME}"
i=$(($i+1))
done < $INPUT_FILE
该脚本将把给定文件中的所有 URL 下载到以输入文件命名的目录中,并删除扩展名。
[gnubeard@mothership: ~]$ cat example.txt
https://upload.wikimedia.org/wikipedia/commons/a/a9/Example.jpg
https://upload.wikimedia.org/wikipedia/commons/7/70/Example.png
[gnubeard@mothership: ~]$ ./download_from_file example.txt
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 9022 100 9022 0 0 477k 0 --:--:-- --:--:-- --:--:-- 489k
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2335 100 2335 0 0 117k 0 --:--:-- --:--:-- --:--:-- 120k
[gnubeard@mothership: ~]$ ls example
1_Example.jpg 2_Example.png
如果您想要将其用于一千个文本文件,则可以使用如下 for 循环:
for FILE in $(ls *.txt); do ./download_from_file $FILE; done