Скачать каталоги с помощью команды wget - PullRequest
0 голосов
/ 03 января 2019

Мне нужно скачивать только файлы 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 голосов
/ 03 января 2019

Используйте параметр командной строки -np|--no-parent и -l|--level wget.

Никогда не поднимайтесь в родительский каталог при рекурсивном извлечении.Это полезный параметр, поскольку он гарантирует, что будут загружены только файлы ниже определенной иерархии.

Укажите максимальный уровень глубины рекурсии.Если вы хотите загрузить все файлы из одного каталога, используйте '-l 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
...