如何从超链接中提取某些字符串并在 bash 中创建具有相同字符串的文件夹?

如何从超链接中提取某些字符串并在 bash 中创建具有相同字符串的文件夹?

我有一个文本文件(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,但是我遇到了以下两个问题

  1. 如何从 url 中提取字符串?
  2. 如何循环并将网页下载到新创建的文件夹中?

答案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。

相关内容