wget - Как загрузить рекурсивно и только определенный mime-types/extensions (т.е. только текст)

Ваш .bashrc или .bash_profile файлы (или другие файлы запуска) содержат опечатку, и Ваш ПУТЬ недопустим. Чтобы действительно быть бесспорными, мы должны были бы видеть Ваш .bashrc или .bash_profile файлы.

Команды как ls mkdir rm не будет работать, потому что Ваша оболочка не может найти их в Вашем ПУТИ, потому что Ваш ПУТЬ недопустим. Команды как echo и"export встроены к Bash, который является, почему они работают. Я не могу объяснить проблему с cd (возможно, ошибка?)

Ищите свой .bashrc или .bash_profile файлы и ищите строки, где ПУТЬ определяется. У Вас могло бы быть плохое определение, где второй ПУТЬ не запускается с $, как это:

export PATH=PATH:/usr/local/bin:/usr/local/sbin
export PATH=PATH:/opt/local/bin:/opt/local/sbin

Это должно сказать что-то вроде этого:

export PATH=$PATH:/usr/local/bin:/usr/local/sbin
export PATH=$PATH:/opt/local/bin:/opt/local/sbin
22
31.10.2012, 10:15
4 ответа

Я попробовал полностью другой подход, должен использовать Scrapy, однако он имеет ту же проблему! Вот то, как я решил его: ТАК: Python Scrapy - mimetype базирующийся фильтр для предотвращения загрузок нетекстового файла?

Решение состоит в том, чтобы установить a Node.js проксируйте и настройте Scrapy для использования его через http_proxy переменная среды.

То, что должен сделать прокси:

  • Возьмите Запросы HTTP от Scrapy, и отправляет его на проверяемый сервер. Затем это отдает ответ от к Scrapy, т.е. прервите весь Трафик HTTP.
  • Для двоичных файлов (на основе эвристики Вы реализуете) она отправляет 403 Forbidden ошибка к Scrapy и непосредственным завершениям запрос/ответ. Это помогает сэкономить время, трафик и Scrapy не откажут.

Демонстрационный Код Прокси, Который на самом деле работает!

http.createServer(function(clientReq, clientRes) {
    var options = {
        host: clientReq.headers['host'],
        port: 80,
        path: clientReq.url,
        method: clientReq.method,
        headers: clientReq.headers
    };


    var fullUrl = clientReq.headers['host'] + clientReq.url;

    var proxyReq = http.request(options, function(proxyRes) {
        var contentType = proxyRes.headers['content-type'] || '';
        if (!contentType.startsWith('text/')) {
            proxyRes.destroy();            
            var httpForbidden = 403;
            clientRes.writeHead(httpForbidden);
            clientRes.write('Binary download is disabled.');
            clientRes.end();
        }

        clientRes.writeHead(proxyRes.statusCode, proxyRes.headers);
        proxyRes.pipe(clientRes);
    });

    proxyReq.on('error', function(e) {
        console.log('problem with clientReq: ' + e.message);
    });

    proxyReq.end();

}).listen(8080);
1
27.01.2020, 19:43

Вы могли попытаться исправить wget с этим (также здесь) для фильтрации типом MIME. Этот патч довольно стар теперь, хотя, таким образом, он не мог бы больше работать.

2
27.01.2020, 19:43
  • 1
    При Предоставлении этому выстрела... ftp.gnu.org/gnu/wget я кидал кости при просто исправлении новейшей версии wget с этим, но никакой удачей (конечно). Я попытался бы обновить патч, но у меня откровенно нет прерываний еще в C++ для него, чтобы не быть приемником времени. Мне действительно удавалось захватить версию wget, для которого она была записана, и получите то выполнение. Я испытал затруднения, хотя компилируя с поддержкой ssl, потому что я не мог выяснить, какую версию openssl я должен был захватить. –  MageProspero 29.03.2013, 03:54
  • 2
    это выглядит большим. какая-либо идея, почему этот патч еще не был принят (четыре года спустя)? –  David Portabella 06.09.2016, 11:57

Вы могли указать список позволенного resp. запрещенные шаблоны имени файла:

Позволенный:

-A LIST
--accept LIST

Запрещенный:

-R LIST
--reject LIST

LIST разделенный запятыми список шаблонов/расширений имени файла.

Можно использовать следующие зарезервированные символы для определения шаблонов:

  • *
  • ?
  • [
  • ]

Примеры:

  • только загрузка файлы PNG: -A png
  • не загружайте файлы CSS: -R css
  • не загружайте файлы PNG, которые запускаются с "аватара": -R avatar*.png

Если бы файл не имеет никакого расширения resp., имя файла не имеет никакого шаблона, который Вы могли бы использовать, Вам был бы нужен парсинг типа MIME, я предполагаю (см., что Lars Kotthoffs отвечает).

21
27.01.2020, 19:43

Новый Wget (Wget2 )уже имеет функцию:

--filter-mime-type    Specify a list of mime types to be saved or ignored`

### `--filter-mime-type=list`

Specify a comma-separated list of MIME types that will be downloaded.  Elements of list may contain wildcards.
If a MIME type starts with the character '!' it won't be downloaded, this is useful when trying to download
something with exceptions. For example, download everything except images:

  wget2 -r https://<site>/<document> --filter-mime-type=*,\!image/*

It is also useful to download files that are compatible with an application of your system. For instance,
download every file that is compatible with LibreOffice Writer from a website using the recursive mode:

  wget2 -r https://<site>/<document> --filter-mime-type=$(sed -r '/^MimeType=/!d;s/^MimeType=//;s/;/,/g' /usr/share/applications/libreoffice-writer.desktop)

Wget2 еще не выпущен, но скоро будет. Нестабильный Debian уже имеет альфа-версию.

См.https://gitlab.com/gnuwget/wget2для получения дополнительной информации. Вы можете оставлять вопросы/комментарии непосредственно по адресу bug -wget@gnu.org.

2
27.01.2020, 19:43

Теги

Похожие вопросы