7

Крупный биологический исследовательский проект решил сделать свой архив доступным по https здесь:

https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/

К сожалению, похоже, что нет никакого манифеста содержимого этих каталогов, поэтому я просто хочу создать его. Я хотел бы получить имена файлов для всего дерева каталогов. Есть какие-нибудь предложения, как это сделать? Я могу написать что-нибудь в perl/python/R/etc. рекурсивно очищать файлы index.html, но я подумал, что может быть какое-то заклинание с wget, которое может дать мне имена файлов, но я пока не нашел этого.

3 ответа3

4

В отличие от протокола FTP, HTTP не знает концепции списка каталогов. Таким образом, wget может только искать ссылки и следовать им в соответствии с определенными правилами, которые определяет пользователь.

При этом, если вы абсолютно этого хотите, вы можете использовать режим отладки wget , чтобы собрать список ссылок, с которыми он сталкивается при анализе HTML-страниц. Это конечно не красота, но здесь идет:

wget -d -r -np -N --spider -e robots=off --no-check-certificate \
  https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/ \
  2>&1 | grep " -> " | grep -Ev "\/\?C=" | sed "s/.* -> //"

Некоторые sidenotes:

  • Это создаст список, который все еще содержит дубликаты (каталогов), поэтому вам нужно перенаправить вывод в файл и использовать uniq для сокращения списка.
  • --spider заставляет wget ничего не загружать, но он все равно будет выполнять HTTP-запрос HEAD для каждого файла, который он сочтет в очередь. Это вызовет намного больший трафик, чем на самом деле нужно / предназначено, и приведет к тому, что все будет довольно медленным.
  • -e robots=off необходим для игнорирования robots.txt который может привести к тому, что wget не начнет поиск (что относится к серверу, который вы указали в своем вопросе).
  • Если у вас wget 1.14 или новее, вы можете использовать --reject-regex="\?C=" уменьшить количество ненужных запросов (для тех ссылок" сортировки ", которые уже упоминались @slm). Это также устраняет необходимость в grep -Ev "\/\?C=" шаг после.
4

У меня фактически была та же самая проблема. Оба эти решения не сработали для меня. Тем не менее, это сделал:

Установите lftp, затем выполните

lftp https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/
du -a > manifest.txt

и это даст вам все каталоги и имена файлов.

2

Я думал, что есть способ сделать это легко с помощью wget/curl, но я также не смог заставить что-либо работать. Вы можете использовать этот рубиновый камень, анемон, чтобы сделать это довольно легко, хотя.

Установка драгоценного камня анемона

% gem install anemone
Fetching: robotex-1.0.0.gem (100%)
Fetching: anemone-0.7.2.gem (100%)
Successfully installed robotex-1.0.0
Successfully installed anemone-0.7.2
2 gems installed
Installing ri documentation for robotex-1.0.0...
Installing ri documentation for anemone-0.7.2...
Installing RDoc documentation for robotex-1.0.0...
Installing RDoc documentation for anemone-0.7.2...

Образец сценария анемона

#! /usr/bin/env ruby
require 'anemone'

Anemone.crawl("https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/") do |anemone|
  anemone.on_every_page do |page|
      puts page.url
  end
end

Пример запуска

% ./anemone.rb | grep -v '?C='
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/README_BCR.txt
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/README_MAF.txt
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/acc/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/brca/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/blca/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/cesc/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/cntl/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/dlbc/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/coad/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/esca/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/gbm/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/hnsc/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/kich/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/kirc/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/kirp/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/lcll/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/laml/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/lcml/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/lihc/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/lgg/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/lnnh/
https://tcga-data.nci.nih.gov/tcgafiles/ftp_auth/distro_ftpusers/anonymous/tumor/lost+found/
...
...

ПРИМЕЧАНИЕ: бит grep -v '?C=' фильтрует стандартные заголовки, которые Apache генерирует через свою директиву Indexing, то есть:

IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable

    сортировщик колонок ss of apache

Они позволяют сортировать страницы по различным столбцам (Имя, Дата создания и т.д.). Они отображаются в виде страниц, и я просто отфильтровываю их из вывода.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .