Можно ли сделать wget всухую?
Я знаю, что вы можете загружать веб-страницы рекурсивно, используя wget
, но возможно ли сделать пробный прогон? Так что вы могли бы сделать тестовый прогон, чтобы увидеть, сколько будет загружено, если вы на самом деле это сделали? Думая о страницах, которые имеют много ссылок на медиа-файлы, такие как, например, изображения, аудио или видеофайлы.
3 ответа
Нет, но вы можете использовать -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
с ним в качестве префикса. Затем он удаляет временный каталог.