使用wget命令下载目录

时间:2019-01-03 15:10:21

标签: bash shell url directory wget

我只需要从不同目录下载rpm文件。这是我的代码-

    #!/usr/bin/env bash

    # Download Only rpm file from certain directory.
    # wget
    #   -4 = only ipv4 
    #   -A = accept list
    #   -r = reccursively
    #   -R = reject list
    #   -c = continue
    #   -e = execute command
    #  --exclude-directories = take list

    # Create a directory
    mkdir mrepo

    # Enter into the directory
    cd mrepo

    # RPM URL
    repo_url="http://download.virtualbox.org/virtualbox/"       

    # Repo rpm
    repo_download=('5.2.20' '5.2.22' '6.0.0')
    # Exclude directories
    exclude_dir=('*_Beta')
    # Download all rpm packages                     
    for i in "${repo_download[@]}"; do
      echo $i/
      echo ${repo_url}/$i/
      # wget -A rpm -rc -e robots=off --reject "index.html*" ${repo_url}/$i/
      wget -A zip -rc -e robots=off --reject "index.html*" ${repo_url}/$i/
    done

    # Tar the downloaded rpm 
    tar -cvzf missingrepo.tgz --exclude=./*.sh .

我的目标是

  1. 仅下载rpm文件
  2. 来自特定目录;因此我创建了这些目录的列表,并将其传递到for循环中。显然,它似乎有效。但实际上不是。
  3. 执行后,进入所需目录。忽略此版本之前的所有目录。在此处 5.2.20 并从该目录下载rpm文件。但是完成该目录的下载后,它将对所有目录执行wget命令,并开始从所有目录下载rpm文件。 :-(
  4. 试图使用--exclude-directories=排除不必要的子目录。但是--exclude-directories参数无效。 PS:为了快速执行和测试目的,我使用zip文件下载。

    wget -A zip -rc -e robots=off --reject "index.html*" --exclude-directories=exclude_dir ${repo_url}/$i/

任何帮助都会非常有帮助!

1 个答案:

答案 0 :(得分:1)

使用translation_en的{​​{1}}和-np|--no-parent命令行选项。

  

以递归方式进行检索时,切勿升至父目录。这是一个有用的选项,因为它可以确保仅下载特定层次结构下的文件。

 
  

指定递归最大深度级别。如果要从一个目录下载所有文件,请使用'-l 1'确保递归深度不超过一个。

因此,该命令应类似于-l|--levelwget在我心中毫无用处。并且您应该将脚本中的wget -A zip -np -r -l 1 -c -e robots=off --reject "index.html*" ${repo_url}/${i}/纠正为--reject "index.html*",并且不要在其后加斜杠。所以你得到

repo_url

结果是

"http://download.virtualbox.org/virtualbox"

为简单起见,该脚本的简短版本如下:

wget -A zip -np -r -l 1 -c -e robots=off ${repo_url}/${i}/