Можно ли сделать wget всухую?

Я знаю, что вы можете загружать веб-страницы рекурсивно, используя wget, но возможно ли сделать пробный прогон? Так что вы могли бы сделать тестовый прогон, чтобы увидеть, сколько будет загружено, если вы на самом деле это сделали? Думая о страницах, которые имеют много ссылок на медиа-файлы, такие как, например, изображения, аудио или видеофайлы.

3 ответа

Вы можете использовать --spider переключатель.

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

С использованием--spiderкак отмечено в ответе Paradroid, отлично подходит для большинства случаев, но если вы пытаетесь получить имя файла, которое он создаст (например, благодаря--restrict-file-namesили просто для надежного перевода кодировки uri), полученного вывода «Удаленный файл существует» недостаточно.

Мое решение состояло в том, чтобы убедиться, что он не может записать файл, а затем зафиксировать ошибку:

      filename="$(wget -P /. "$uri" 2>&1 \
  |awk 'pd = index($0, ": Permission denied") {print substr($0, 4, pd - 4)}'
)"
echo "Would save: $filename"

The -P /.Опция указывает префикс каталога root. (Как ни странно, игнорирует-P /и вместо этого записывает в локальный каталог. Точка работает вокруг этого.)

Обратите внимание, что вам не следует запускать это как пользователь с доступом на запись в/. Если у вас есть такой доступ, попробуйте следующее:

      filename="$(
  d="$(mktemp -d)";
  chmod 000 $d;
  wget -P $d "$uri" 2>&1 |awk -v d=$d/ '
    a = index($0, d) && b = index($0, ": Permission denied") {
      a += length(d);
      print substr($0, a, b - a)
    }
  ';
  rm -rf $d
)"
echo "Would save: $filename"

Это создает временный каталог, делает его недоступным для записи, а затем запускаетwgetс ним в качестве префикса. Затем он удаляет временный каталог.

Другие вопросы по тегам