Как оптимизировать сценарий загрузки wget

Я не могу объяснить €â”, Я ожидал бы │ который является интерпретацией Windows 1252 байтов, которые кодируют в UTF-8. то, что Tmux использует для вертикальных границ между окнами. Но у Вас очевидно есть несоответствие кодирования.

Выполненный locale видеть, каковы Ваши настройки локали. Собственный порт Windows Rxvt в Cygwin не поддерживает UTF-8, таким образом, необходимо установить 8-разрядную локаль. А именно, LC_CTYPE категория не должна заканчиваться в utf8 (или utf-8 или UTF8 или UTF-8).

Действительное решение состоит в том, чтобы использовать MinTTY (это поставляется с Cygwin), или PuTTYcyg. Оба получены из PuTTY и поддерживают UTF-8. См. также, Как Вы настраиваете машину Windows для пользователя Linux?

2
06.04.2013, 17:51
2 ответа

Я не думаю, что Вы можете. В конце концов, использование -r рекурсивная опция загрузки в основном просит, чтобы wget искал ссылки (в -l уровни), и ссылки только найдены в файлах HTML. Так wget таким образом должен загрузить и проанализировать файлы HTML, ища ссылки и на большее количество файлов HTML и на mp3 файлов.

Если Вы уже создали список ссылок, почему Вы просто не используете fgrep ".mp3" создать новый список с только mp3 файлы и использовать это в качестве link_source_file для wget? Поскольку wget не загрузит файлов HTML, он не найдет больше ссылок, таким образом, можно будет отбросить -r -l и вероятно несколько других опций также - просто сохраняют -i-A, хотя список уже только содержит просто mp3 файлы). Используйте -x опция вызвать создание файловой иерархии, даже без -r.

Короче говоря, если Вы хотите пересечь сайт рекурсивно, необходимо позволить wget загружать и анализировать файлы HTML, даже если это не сохраняет их.


Альтернатива должна была бы использовать wget для загрузки всего нескольких уровней файлов HTML. Затем получите ссылки из этих файлов вручную и создайте список со всеми mp3 файлами, которые Вы нашли (рысь, sed, и fgrep очень поможет для этого). Или если Вы знаете что-то об организации сайта, генерируете список файлов, Вы хотите некоторым другим способом (например, использование сценария оболочки для создания списка со строками как:

http://www.sagar.com/1/song.mp3
http://www.sagar.com/2/song.mp3
http://www.sagar.com/3/song.mp3
http://www.sagar.com/100/song.mp3
1
27.01.2020, 22:23

Ручной подход с grep.

Запустите в пустом каталоге и загрузите все файлы HTML в своем списке нерекурсивно. Добавьте --convert-links опции так любые относительные ссылки на файлы MP3 будут преобразованы в полные. Таким образом, у Вас есть только файлы как тот, Вы отправили выше с одной или несколькими ссылками на файлы MP3.

Затем можно сделать:

(for f in *
 do
     grep -P --only-matching '(?<=href=")[^ "]*\.mp3' foo.html "$f"
     # rm "$f"
 done) | xargs wget

Не учтите # перед rm если Вы хотите удалить загруженные non-mp3 файлы.

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

0
27.01.2020, 22:23
  • 1
    rm удалит входные файлы даже для ошибки, как то, когда связь прервется.Не очень. Это также удалит любые другие файлы в каталоге, включая mp3 файлы. Я отредактирую, чтобы прокомментировать rm. (это мог быть a mv к subdir, или использующий a && между grep и rm по крайней мере.) –  Volker Siegel 20.08.2014, 20:58
  • 2
    @VolkerSiegel Вы абсолютно правы относительно отсутствия обработки ошибок, это не был фокус ответа. Что касается rm, Я действительно писал, что Вы запускаете с пустого каталога, таким образом, существуют только файлы HTML там при выполнении команды - если она перестала работать, Вы повторно загружаете их. –  frostschutz 20.08.2014, 21:06
  • 3
    Конечно, это работает главным образом прекрасное при следовании полному описанию - но люди иногда приезжают сюда, потому что они не знают много о сценариях оболочки и т.д., Что не работает, даже с полным описанием: Когда будет ошибка для некоторых входных файлов, они будут удалены, но существуют некоторые заканчивающиеся mp3 файлы. Легко пропустить это не, все были загружены затем, и не возможные узнать, который перестал работать, если буфер scrollback или терминал не достаточно длинны. –  Volker Siegel 20.08.2014, 21:12
  • 4
    Ужасно большие ожидания относительно quick&dirty решения :) –  frostschutz 20.08.2014, 21:25

Теги

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