Вопрос или проблема
Как сделать так, чтобы wget не загружал один и тот же файл более одного раза (с расширением и без него)
Я использую wget для загрузки некоторых страниц, и не хочу, чтобы он загружал одну и ту же страницу, если она уже была загружена. Я использую следующую команду:
wget --no-clobber --input text04.txt --directory-prefix=/path/file
** файл text04.txt содержит новые ссылки каждый день, которые могут совпадать с предыдущими днями
При загрузке страницы приходят без расширения (в случае .html). Это не дает файлу открываться нормально, но если я добавляю расширение после загрузки wget, то при повторном выполнении команды “–no-clobber” становится бесполезным, так как добавление .html воспринимается wget как новый файл.
Хотите ли вы добавить расширение (.html), чтобы при повторном выполнении wget не загружать один и тот же файл более одного раза?
Вам нужно добавить одну опцию --html-extension
, так что команда будет выглядеть так:
wget --no-clobber --html-extension --input text04.txt --directory-prefix=/path/file
Таким образом, расширение .html
будет добавлено автоматически.
Пожалуйста, обратитесь к этому ответу для получения дополнительной информации.
Примечание:
К сожалению, wget
не может добавить расширение .html
на этапе проверки. Поэтому он всегда будет повторно загружать страницу при указанных опциях --no-clobber
и --html-extension
, если удаленная страница не имеет расширения .html
, но по крайней мере обновит и перезапишет существующую локальную копию страницы вместо того, чтобы записывать еще одну копию.
Удачи
Загрузка только новых файлов с wget с добавлением расширения .html для удобства просмотра
Для такой проблемы я бы предложил загружать с помощью wget
, не используя переключатель --html-extension
, а затем просто добавлять расширения .html
с помощью скрипта позже, в отдельную выходную папку. Мягкие ссылки могут использоваться для связи с контентом, а не создания копии данных, чтобы сэкономить место на диске.
Пример скрипта Bash:
# Папка, куда wget будет загружать файлы, но
# только если они еще не были загружены
Dir_Orig="/some/path/here/wget-original"
# Место, куда будут помещены читабельные версии HTML-файлов
Dir_HTML="/another/folder/final-html"
for File in "$Dir_Orig"/*; do
# Удалить любые ведущие каталоги из имени файла
Basename="${File##*/}"
# Создать жесткую ссылку на файл с расширением .html
ln "$File" "$Dir_HTML/$Basename".html
done
Ответ или решение
Чтобы сделать так, чтобы wget
не загружал один и тот же файл более одного раза, и при этом добавлял расширение .html
, можно воспользоваться несколькими подходами.
1. Использование параметров wget
Рекомендуемый способ — это использование параметров --no-clobber
и --html-extension
. Вот команда, которую нужно выполнить:
wget --no-clobber --html-extension --input text04.txt --directory-prefix=/path/file
--no-clobber
: не перезаписывать уже загруженные файлы.--html-extension
: автоматически добавляет расширение.html
к загружаемым файлам.
Однако стоит отметить, что wget
не способен на этапе проверки существования файла учитывать добавленное расширение .html
. Это значит, что если удалённая страница будет загружена без расширения, wget
будет считать её "новым" файлом при повторном запуске и снова загрузит его.
2. Использование сценария на Bash
Вместо того чтобы прибегать только к wget
, можно написать Bash-скрипт, который будет сначала загружать страницы без расширения, а затем добавлять расширение .html
после загрузки. Вот пример такого сценария:
# Папка, куда wget будет загружать файлы
Dir_Orig="/some/path/here/wget-original"
# Папка, куда будут помещаться корректные HTML-файлы
Dir_HTML="/another/folder/final-html"
# Выполнение команды wget для загрузки файлов
wget --no-clobber --input text04.txt --directory-prefix=$Dir_Orig
# Создание ссылок на файлы с расширением .html
for File in "$Dir_Orig"/*; do
# Удаление ведущих директорий из имени файла
Basename="${File##*/}"
# Создание жесткой ссылки на файл с добавлением .html
ln "$File" "$Dir_HTML/$Basename.html"
done
3. Заключение
Таким образом, при использовании комбинации wget
и дополнительного скрипта на Bash, вы сможете скачать новые страницы без повторных загрузок одного и того же файла и добавить к ним расширение .html
для облегчения доступа.
Этот подход гарантирует, что у вас всегда будет актуальная версия загруженных страниц, а их использование станет проще благодаря добавленному расширению.