![如何从超链接中提取某些字符串并在 bash 中创建具有相同字符串的文件夹?](https://linux22.com/image/1138339/%E5%A6%82%E4%BD%95%E4%BB%8E%E8%B6%85%E9%93%BE%E6%8E%A5%E4%B8%AD%E6%8F%90%E5%8F%96%E6%9F%90%E4%BA%9B%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%B9%B6%E5%9C%A8%20bash%20%E4%B8%AD%E5%88%9B%E5%BB%BA%E5%85%B7%E6%9C%89%E7%9B%B8%E5%90%8C%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%96%87%E4%BB%B6%E5%A4%B9%EF%BC%9F.png)
我有一个文本文件(web.txt),其中包含一长串具有此模式的 URL
http://www.example.com/ab1.htm
http://www.example.com/ab2.htm
http://www.example.com/bc1.htm
http://www.example.com/qw3.htm
.
.
http://www.example.com/xc15.htm
我想获取 URL 列表,然后提取 URL 中不带 .htm 的网页最后一个字符串 (ab1、ab2、bc1..xc15) 作为变量,然后创建一个以该名称命名的新文件夹。然后我想使用 wget 将该网页下载到新创建的文件夹中。
#!/bin/bash
NAMES=`cat web.txt` #urls from web.txt file
for NAME in $NAMES; do
echo "$NAME"
NEWNAME=#string from url
mkdir -p /home/$NEWNAME
wget $NAME
done
我能够从我的 web.txt 文件中获取 URL,但是我遇到了以下两个问题
- 如何从 url 中提取字符串?
- 如何循环并将网页下载到新创建的文件夹中?
答案1
while read url; do
newname="$(basename "$url" .htm)"
mkdir -p "/home/$newname"
wget -O "/home/$newname/$newname.htm" "$url"
done < web.txt
答案2
看起来你还没有重读man bash
足够多的次数。这很简单:
BASEDIR="$HOME"
for myurl in $( cat web.txt ) ; do
# erase everything "*" up to the last "/"
mydir="${myurl##*/}"
# erase the trailing "%" ".htm"
mydir=${mydir%.htm}
mkdir -p $BASEDIR/$mydir
# run the wget in a subshell, in the new directory
(cd $BASEDIR/$mydir;wget "$myurl")
done
恕我直言,一组不错的选项可供使用wget
(请阅读man wget
以了解它们是否也适合您)--no-parent --relative --page-requisites --convert-links -nv -t 3 --waitretry=6 --random-wait
,但是 YMMV。