Я загружаю сайт с помощью wget, и ко многим ссылкам прикреплены запросы, поэтому, когда я делаю это:
wget -nv -c -r -H -A mp3 -nd http://url.to.old.podcasts.com/
Я получаю много таких файлов:
1.mp3?foo=bar
2.mp3?blatz=pow
3.mp3?fizz=buzz
Что я хотел бы закончить это:
1.mp3
2.mp3
3.mp3
Все это происходит в Ubuntu Linux, и у меня есть wget 1.10.2.
Я знаю, что могу сделать это после того, как получу все через скрипт, чтобы переименовать все. Однако мне бы очень хотелось найти решение изнутри wget, чтобы я мог видеть правильные имена во время загрузки.
Может ли кто-нибудь помочь мне разгадать это?
wget
команд (если не меньше).Ответы:
Если сервер добрый, он может прикрепить заголовок Content-Disposition к загрузке, сообщая вашему клиенту правильное имя файла. Чтобы заставить wget прослушать этот заголовок для окончательного имени файла, достаточно просто:
Вам понадобится новая версия Wget, чтобы использовать эту функцию.
Я понятия не имею, насколько хорошо он обрабатывает сервер, требующий имя файла '/ etc / passwd'.
источник
?v=blah
версионированием типов в них. Может быть, есть какой-то специфический для облачного фронта способ запроса документа без них, я не знаю, но мне не удалось найти его, поэтому в таком случае вполне может понадобиться что-то похожее на один из других ответов. (Если кто-нибудь знает способ раздеть - или заставить Cloudfront не обслуживать -v=
струны, я хотел бы услышать об этом.)После обработки большого пакета я понял, что должен был
wget
игнорировать строки запроса. Я не хотел делать это снова, поэтому я сделал этот скрипт, который работал для меня:Поместите это в файл вроде
rmqstr
иchmod +x rmqstr
Синтаксис:./rmqstr <directory (defaults to .)>
Он будет рекурсивно удалять строки запроса из всех имен файлов.
источник
Я думаю,
wget
чтобы сохранить как имя файла, отличное от указанного в URL, вам нужно использовать-O filename
аргумент. Это только то, что вы хотите, когда вы даете ему один URL - с несколькими URL, весь загруженный контент заканчивается вfilename
.Но это действительно ответ. Вместо того, чтобы пытаться сделать все это одной
wget
командой, используйте несколько команд. Теперь ваш рабочий процесс становится:wget
чтобы получить базовый HTML-файл (ы), содержащий ваши ссылки;mp3
,http://foo/bar/baz.mp3?gargle=blaster
вbaz.mp3
wget <URL> -O <filename>
Это решает вашу проблему, но теперь вам нужно выяснить, как получить базовые файлы, чтобы найти ваши
mp3
URL.Вы имеете в виду конкретный сайт / базовый URL? С шагами 1 и 3 будет легче справиться с конкретным примером.
источник
ХОРОШО. Используйте wget как обычно; используйте скрипт post-wget, который вы обычно используете, но обработайте вывод wget так, чтобы это было проще для глаз:
Это все равно покажет,
?foo=bar
как вы загружаете, но отобразит остальную часть имени в ярком голубом.источник
У меня такой же подход, как у @Gregory Wolf, потому что его код всегда создавал сообщения об ошибках вроде этого
Таким образом, я сначала проверяю, есть ли строка запроса в имени файла перед перемещением файла:
Это будет рекурсивно проверять каждый файл и удалять все строки запроса в их именах файлов, если таковые имеются.
источник
Посмотрите на эти две команды, которые я создал для клонирования сайта, и после завершения клонирования вы можете выполнить вторую команду.
Вторая команда просматривает весь клон, ищет имена шаблонов файлов « ? » И удаляет строку запроса из имени файла.
(Смотрите это в GitHub Gist .)
источник
Еще проще: /unix/196253/how-do-you-rename-files-specifically-in-a-list-that-wget-will-use
Это предполагает метод, который по существу использует функцию переименования wget (может быть изменена для включения каталога) для нескольких файлов. Смотрите вторую версию, предложенную.
источник