【问题标题】:Download directories using wget command使用 wget 命令下载目录
【发布时间】:2019-05-30 04:48:34
【问题描述】:

我只需要从不同的目录下载 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/

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

【问题讨论】:

    标签: bash shell url directory wget


    【解决方案1】:

    使用wget 的-np|--no-parent 和-l|--level 命令行选项。

    递归检索时永远不要上升到父目录。这是一个有用的选项,因为它保证只会下载特定层次结构之下的文件。

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

    所以命令应该看起来像这样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}/
    

    那么结果就是

    mrepo/download.virtualbox.org/virtualbox/5.2.20/VirtualBoxSDK-5.2.20-125813.zip
    mrepo/download.virtualbox.org/virtualbox/5.2.22/VirtualBoxSDK-5.2.22-126460.zip
    mrepo/download.virtualbox.org/virtualbox/6.0.0/VirtualBoxSDK-6.0.0-127566.zip
    

    为了完整起见,脚本的简短版本如下:

    #!/usr/bin/env bash
    
    repo_url="https://download.virtualbox.org/virtualbox"
    repo_download=('5.2.20' '5.2.22' '6.0.0')
    
    for i in "${repo_download[@]}"; do
      wget -A zip -np -r -l 1 -c -e robots=off ${repo_url}/${i}/
    done
    

    【讨论】:

    • 好的。我会检查。 --exclude-directories 参数呢?如果 URL 有任何子目录,比如说5.2.20,我有那个子目录名称5.2.20-src,它还包含 zip、rpm 文件,我需要排除。
    • 使用-l 选项增强答案
    • 它现在只下载文件夹而不是内容。不知道哪里出错了
    • 在答案中添加了脚本的简短版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    相关资源
    最近更新 更多