Ответ 1
Используйте команду basename
, чтобы извлечь имя файла из URL-адреса. Например:
url=http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg
filename=$(basename "$url")
wget "$url"
Я пишу script для bash, и мне нужно получить имя загруженного файла с помощью wget и поместить его в $string
например, если я загружаю этот файл ниже, я хочу поместить его имя mxKL17DdgUhcr.jpg в строку $string
wget http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg
45439 (44K) [image/jpeg]
Saving to: «mxKL17DdgUhcr.jpg»
100%[===================================================================================================>] 45 439 --.-K/s в 0s
2011-12-20 12:25:33 (388 MB/s) - «mxKL17DdgUhcr.jpg» saved [45439/45439]
Используйте команду basename
, чтобы извлечь имя файла из URL-адреса. Например:
url=http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg
filename=$(basename "$url")
wget "$url"
wget --server-response -q -O - "https://very.long/url/here" 2>&1 |
grep "Content-Disposition:" | tail -1 |
awk 'match($0, /filename=(.+)/, f){ print f[1] }' )
Это правильная версия, так как может быть несколько перенаправлений 301/302 и, наконец, заголовок Content-Disposition:
для установки имени файла
Удовлетворение имени файла на основе URL-адреса не всегда корректно.
Вы можете просто указать имя файла перед загрузкой, с опцией -O
на wget
:
wget -O myfile.html http://www.example.com/
Вы можете явно указать имя, подобное этому:
url='http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg'
file=`basename "$url"`
wget "$url" -O "$file"
Для обработки имен файлов с кодировкой URL:
URL="http://www.example.com/ESTAD%C3%8DSTICA(2012).pdf"
BASE=$(basename ${URL}) # ESTAD%C3%8DSTICA(2012).pdf
FILE=$(printf '%b' ${BASE//%/\\x}) # ESTADÍSTICA(2012).pdf
wget ${URL}
~ $ URL='http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg'
~ $ echo ${URL##*/}
mxKL17DdgUhcr.jpg
~ $ wget $URL -O ${URL##*/}
--18:34:26-- http://pics.sitename.com/images/191211/mxKL17DdgUhcr.jpg
=> `mxKL17DdgUhcr.jpg'
Я думаю, у вас уже есть полный URL-адрес файла где-нибудь в переменной? Используйте расширение bash для префикса:
echo ${url##*/}
альтернатива @Gowtham Gopalakrishnan ответа это просто
wget --server-response -q "https://very.long/url/here" 2>&1 | awk -F"filename=" '{if ($2) print $2}'
который просто выводит имя файла, который установлен в расположении содержимого
пример
$ wget --server-response -q https://hostname/filename-that-i-liek.zip 2>&1 | awk -F"filename=" '{if ($2) print $2}'
"filename-that-i-liek.zip"
$
Итак, вы хотите указать имя файла/изображения в качестве параметра
попробуйте это
echo -n "Give me the name of file in http://pics.sitename.com/images/191211/ :"
read $string
sudo wget http://pics.sitename.com/images/191211/$string ;;
Я думаю, это может помочь вам