Как справиться с поиском нескольких шаблонов файлов / каталогов в wget - PullRequest
0 голосов
/ 07 ноября 2018

Итак, у меня есть каталог с миллионами файлов и каталогами по 50 КБ, вложенными примерно в 10 слоев. Требуется много времени, чтобы просто пройти и извлечь 100-байтовый файл из 1/10 каталогов, потому что он должен войти в каждый каталог и делать все, что он делает. Это, вероятно, займет несколько часов, хотя на самом деле контент не загружается.

Итак, одно из решений моей проблемы (или того, что я пытаюсь) - это сделать:

function download() {
  wget -r \
    -c \
    -A $3 \
    -A $2 \
    "$1$2"
}

domain="ftp://domain.com"
path=/foo

download $domain $path $path/*/README*
download $domain $path $path/*/data.xml
download $domain $path $path/*/ARCHIVE_*/*.gz
download $domain $path $path/*/Bar/example.txt
download $domain $path $path/*/Hello/*/world.*.txt

Но это пока не совсем работает, я хочу, чтобы каждая строка на самом деле просто загружала эти шаблоны, но, похоже, у меня есть еще кое-какая работа. Я получаю кучу таких:

Rejecting 'README'
Rejecting 'X_Y_Z.gz'
...

Итак, я попытался сделать следующее:

download $domain $path \
  $path/*/README*,$path/*/data.xml,$path/*/ARCHIVE_*/*.gz,$path/*/Bar/example.txt,$path/*/Hello/*/world.*.txt

Но все та же проблема.

Вопрос здесь в том, как я могу сделать эту одну wget команду (чтобы ей не нужно было 5 раз повторно обрабатывать все дерево каталогов ftp), загружать только файлы / каталоги, соответствующие этим шаблонам. .

Я пытаюсь изменить -A на -I, и начинается загрузка ненужного мне материала:

function download() {
  wget -r \
    -c \
    -I $3 \
    -I $2 \
    "$1$2"
}

Я тоже пытался это , но он загружает вещи, которые мне не нужны:

function download() {
  wget -r \
    -c \
    --accept-regex $3 \
    "$1$2"
}

domain="ftp://domain.com"
path=/foo

download $domain $path \
  $path/.*/README.*,$path/.*/data.xml,$path/.*/ARCHIVE_.*/.*.gz,$path/.*/Bar/example.txt,$path/.*/Hello/.*/world..*.txt
...