Wget изменить имя файла
Если я запускаю wget дважды, он не распознает, что он уже скачал этот файл, и создает новый. Есть ли способ предотвратить загрузку файла снова?
(Рад использовать curl или аналогичную альтернативу, если wget не может этого сделать.)
Ну, он создает новый, потому что он распознает файл там!Я предлагаю вам использовать -N опцию.
Он включает отметку времени, при которой файл повторно загружается только в том случае, если на сервере он новее, чем загруженная версия.
Предостережение (из комментария KasiyA)
Если сервер не настроен должным образом, он всегда может сообщить, что файл новый, и -N всегда будет перезагружать файл. В этом случае, -nc вероятно, лучший вариант.
Если сервер не настроен должным образом, -N может произойти сбой, и wget всегда будет загружен заново. Так что иногда -nc лучше, чем -N @Kasiy, спасибо за ваш комментарий, похоже, нет подходящего варианта для всех случаев.Да, это -c вариант.
Если файл такой же, вторая попытка загрузки остановится.
Предостережения (из комментариев Джофеля)
Если файл изменился на сервере, -c опция может дать неверные результаты.
С помощью -c wget просто запрашивает у сервера любые данные, кроме части уже загруженного файла, и ничего больше. Он не проверяет, было ли какое-либо изменение в части файла, который уже загружен. Таким образом, вы можете испортить файл, который представляет собой смесь старого и нового файла.
Локальный тест
Вы можете проверить это, запустив простой локальный веб-сервер следующим образом (благодаря @roadmr «S ответа ):
Откройте окно терминала и введите:
Теперь откройте другой терминал и выполните:
Обратите внимание, что filename-to-download это файл, в /path/to/parent-download-dir/ котором мы хотим его скачать.
Теперь, если вы запустите команду wget несколько раз, вы увидите:
Хорошо, теперь перейдите в /path/to/parent-download-dir/ каталог и добавьте что-нибудь в исходный файл, например, если это текстовый файл, добавьте в него простую дополнительную строку и сохраните файл. Теперь попробуйте с wget -c . . Отлично, теперь вы увидите, что файл снова загружается, но вы уже скачали его раньше.
Причина: зачем перезагружать?
потому что его размер изменился на больший размер, чем старый загруженный файл и ничего больше.
Я загружаю сайт с помощью wget, и ко многим ссылкам прикреплены запросы, поэтому, когда я делаю это:
Я получаю много таких файлов:
Что я хотел бы закончить это:
Все это происходит в Ubuntu Linux, и у меня есть wget 1.10.2.
Я знаю, что могу сделать это после того, как получу все через скрипт, чтобы переименовать все. Однако мне бы очень хотелось найти решение изнутри wget, чтобы я мог видеть правильные имена во время загрузки.
Может ли кто-нибудь помочь мне разгадать это?
@TutorialPoint почему? Вопрос в том, чтобы найти способ сделать это, поэтому SO просто перенесет его сюда. @ayrnieu: не в одной команде, нет. и не без помощника. но вы, безусловно, можете сделать это всего за n + 1 wget команд (если не меньше).Если сервер добрый, он может прикрепить заголовок Content-Disposition к загрузке, сообщая вашему клиенту правильное имя файла. Чтобы заставить wget прослушать этот заголовок для окончательного имени файла, достаточно просто:
Вам понадобится новая версия Wget, чтобы использовать эту функцию.
Я понятия не имею, насколько хорошо он обрабатывает сервер, требующий имя файла '/ etc / passwd'.
После обработки большого пакета я понял, что должен был wget игнорировать строки запроса. Я не хотел делать это снова, поэтому я сделал этот скрипт, который работал для меня:
Поместите это в файл вроде rmqstr и chmod +x rmqstr Синтаксис: ./rmqstr <directory (defaults to .)>
Он будет рекурсивно удалять строки запроса из всех имен файлов.
Я бы добавил `-name" \? "`, Чтобы найти часть, ограничивающую только необходимые файлы :)Я думаю, wget чтобы сохранить как имя файла, отличное от указанного в URL, вам нужно использовать -O filename аргумент. Это только то, что вы хотите, когда вы даете ему один URL - с несколькими URL, весь загруженный контент заканчивается в filename .
Но это действительно ответ. Вместо того, чтобы пытаться сделать все это одной wget командой, используйте несколько команд. Теперь ваш рабочий процесс становится:
Это решает вашу проблему, но теперь вам нужно выяснить, как получить базовые файлы, чтобы найти ваши mp3 URL.
так что я могу видеть правильные имена во время загрузки.
ХОРОШО. Используйте wget как обычно; используйте скрипт post-wget, который вы обычно используете, но обработайте вывод wget так, чтобы это было проще для глаз:
Это все равно покажет, ?foo=bar как вы загружаете, но отобразит остальную часть имени в ярком голубом.
Это несколько решает проблему отображаемых имен файлов, но OP также хочет, чтобы в окончательном имени файла не было строки запроса.mv: «./file» и «./file» - это один и тот же файл
Таким образом, я сначала проверяю, есть ли строка запроса в имени файла перед перемещением файла:
Это будет рекурсивно проверять каждый файл и удалять все строки запроса в их именах файлов, если таковые имеются.
Посмотрите на эти две команды, которые я создал для клонирования сайта, и после завершения клонирования вы можете выполнить вторую команду.
Вторая команда просматривает весь клон, ищет имена шаблонов файлов « ? » И удаляет строку запроса из имени файла.
я создал веб-сайт с функцией загрузки и был сохранен на сервере с расширением .xxx и переименован в каждый файл, а затем записал исходное расширение и имя файла в базу данных. Клиент -> Загрузить -> images.jpg Сервер -> Сохранение -> md5.xxx База данных -> вставка -> images.jpg и md5.xxx Клиент ->.
Мне нужна веб-форма для загрузки файлов. Я хочу сохранить загруженный файл с оригинальным именем. У меня есть этот код PHP: <form action= enctype=multipart/form-data method=POST> <input type=file name=file /> <br /> <input type=submit value=Upload /> </form> <?php.
- -S --spider --content-disposition вариантов с wget
- -I -L опции с cURL
Затем просто используйте опцию-O и создайте свое локальное имя файла с только что полученными originalName и i , которые у вас уже есть.
С вашим сценарием это дало бы:
wget не поддерживает шаблон/шаблон в опции -O (заглавная буква O, BTW). Таким образом, вы можете сделать какой-то трюк, например, сначала поместить файл во временный каталог, а затем переименовать его с помощью shell. Что-то вроде:
Похожие вопросы:
Я загружаю некоторые файлы из базы данных с помощью wget, но некоторые файлы в базе данных называются одинаково. Итак, когда я загружаю 2 файла с одинаковым именем, файлы ломаются. Интересно, есть.
В моем проекте я загружаю файл. Во время загрузки я сохраняю его исходное имя файла и расширение в базе данных и сохраняю этот файл с некоторым GUID на сервере, сгенерированный GUID также хранится в.
я создал веб-сайт с функцией загрузки и был сохранен на сервере с расширением .xxx и переименован в каждый файл, а затем записал исходное расширение и имя файла в базу данных. Клиент -> Загрузить ->.
Мне нужна веб-форма для загрузки файлов. Я хочу сохранить загруженный файл с оригинальным именем. У меня есть этот код PHP: <form action= enctype=multipart/form-data method=POST> <input.
Мне нужно сохранить загруженный файл с его оригинальным именем и типом вместо временного имени файла в отдельной папке. Используя приведенный ниже код, я могу получить имя файла и тип, но как я могу.
когда я делаю wget, как показано ниже, файлы загружаются с именем файла как sample.txt?st=2017-07-19T06%3A00%3A00Z wget.
Привет, ребята, новички в laravel здесь !! Я хочу сохранить файлы внутри моего DB с их оригинальным именем файла !! Вот как я храню свой файл public function store(Request $request) < if.
Я хочу сохранить загруженный файл с оригинальным именем. Что я должен добавить к этому коду? Ниже приведен мой код public function store(Request $request) < if($request->hasFile('image')) < $file.
Все мы иногда качаем файлы из интернета. Если для этого использовать программы с графическим интерфейсом, то всё оказывается предельно просто. Однако, при работе в командной строке Linux дело несколько усложняется. Особенно — для тех, кто не знаком с подходящими инструментами. Один из таких инструментов — чрезвычайно мощная утилита wget, которая подходит для выполнения всех видов загрузок. Предлагаем вашему вниманию двенадцать примеров, разобрав которые, можно освоить основные возможности wget.
1. Загрузка одного файла
Если всё, что нужно — это загрузка одного файла, нам подойдёт следующая конструкция:
После ввода такой команды начнётся скачивание Nagios Core. В ходе этого процесса можно будет видеть данные о загрузке, например — сведения о том, какой объём данных уже загружен, текущую скорость, и то, сколько времени осталось до конца загрузки.
2. Загрузка файла и сохранение его с новым именем
Если мы хотим сохранить загруженный файл под именем, отличающимся от его исходного имени, нам пригодится команда wget с параметром -O :
При таком подходе загруженный файл будет сохранён под именем nagios_latest .
3. Ограничение скорости загрузки файлов
При необходимости скорость загрузки файлов с помощью wget можно ограничить. В результате эта операция не будет занимать весь доступный канал передачи данных и не повлияет на другие процессы, связанные с сетью. Сделать это можно, используя параметр --limit-rate и указав ограничение скорости, выраженное в байтах (в виде обычного числа), килобайтах (добавив после числа K ) или мегабайтах ( M ) в секунду:
Здесь задано ограничение скорости загрузки, равное 500 Кб/с.
4. Завершение прерванной загрузки
Если в ходе загрузки файлов эта операция была прервана, можно возобновить загрузку с помощью параметра -c команды wget :
Если этот параметр не использовать, то загрузка недокачанного файла начнётся сначала.
5. Фоновая загрузка файла
Если вы загружаете файл огромного размера и хотите выполнять эту операцию в фоне, сделать это можно, используя параметр -b :
6. Загрузка нескольких файлов
Если имеется список URL файлов, которые надо загрузить, но вам не хочется вручную запускать загрузки этих файлов, можно использовать параметр -I . Однако, перед тем, как начинать загрузку, нужно создать файл, содержащий все адреса. Например, сделать это можно такой командой:
В этот файл нужно поместить адреса — по одному в каждой строке. Далее, осталось лишь запустить wget , передав этой утилите только что созданный файл со списком загрузок:
Выполнение этой команды приведёт к поочерёдной загрузке всех файлов из списка.
7. Увеличение общего числа попыток загрузки файла
Для того, чтобы настроить число повторных попыток загрузки файла, можно использовать параметр --tries :
8. Загрузка файлов с FTP-сервера
Команда загрузки файла с анонимного FTP-сервера с помощью wget выглядит так:
Если для доступа к файлу требуются имя пользователя и пароль, то команда примет такой вид:
9. Создание локальной копии веб-сайта
Если нужно загрузить содержимое целого веб-сайта, сделать это можно, воспользовавшись параметром --mirror :
Обратите внимание на дополнительные параметры командной строки:
- -p : производится загрузка всех файлов, необходимых для корректного отображения HTML-страниц.
- --convert-links : ссылки в документах будут преобразованы для целей локального просмотра сайта.
- -P /home/dan : материалы будут сохранены в папку /home/dan .
10. Загрузка с сайта только файлов определённого типа
Для того, чтобы загрузить с сайта только файлы определённого типа, можно воспользоваться параметрами -r -A :
11. Пропуск файлов определённого типа
Если вы хотите скопировать целый веб-сайт, но при этом вам не нужны файлы определённого типа, отключить их загрузку можно с помощью параметра --reject :
12. Загрузка с использованием собственного .log-файла
Для того, чтобы загрузить файл и использовать при этом собственный .log -файл, воспользуйтесь параметром -o и укажите имя файла журнала:
Итоги
Wget — довольно простая в использовании, но весьма полезная утилита Linux. И, на самом деле то, о чём мы рассказали — лишь малая часть того, что она умеет. Надеемся, этот обзор поможет тем, кто не был знаком с wget, оценить эту программу, и, возможно, включить её в свой повседневный арсенал инструментов командной строки.
Читайте также: