Я всегда использовал scp
скопировать его:
scp -P 8129 ~/.ssh/id_*.pub user@host:
ssh -p 8129 user@host 'cat id_*.pub >> ~/.ssh/authorized_keys'
Хотя я должен сказать, я буду, вероятно, использовать другие (one-line/connection) методы, если я буду помнить их в будущем. Но это - другая опция для Вас.
По умолчанию wget пишет в файл, имя которого является последним компонентом URL, который Вы передаете ему. Много серверов перенаправляют URL как http://www.url1.com/app?q=123&gibb=erish&gar=ble
к другому URL с привлекательным именем файла как http://download.url1.com/files/something.pdf
. Можно сказать wget использовать имя от перенаправленного URL (т.е. something.pdf
) вместо app?q=123&gibb=erish&gar=ble
путем передачи --trust-server-names
опция. Это не режим по умолчанию, потому что, если используется небрежно, он мог бы привести к перезаписи непредсказуемого имени файла в текущем каталоге; но если Вы доверяете серверу или работаете в каталоге, содержащем никакие другие драгоценные файлы, --trust-server-names
обычно правильная вещь использовать.
Некоторые серверы используют a Content-Disposition
заголовок вместо перенаправления для определения имени файла. Передайте --content-disposition
опция заставить wget использовать это имя файла.
Таким образом:
wget --content-disposition --trust-server-names -i list_of_urls
Если Вы все еще не получаете привлекательные имена файлов, можно хотеть указать собственное. Предположим, что у Вас есть файл, содержащий строки как
http://www.url1.com/app?q=123&gibb=erish&gar=ble foo.pdf
http://www.url2.com/app?q=111&wha=tcha&mac=allit bar.txt
Чтобы заставить wget загрузить файлы на указанные имена файлов, принимая нет никаких пробельных символов в URL или в именах файлов:
err=0
while read -r url filename tail; do
wget -O "$filename" "$url" || err=1
done <list_of_urls_and_file_names
err
переменная содержит 0, если все загрузки успешно выполнились и 1 иначе, Вы можете return $err
если Вы помещаете этот отрывок в функцию или exit $err
если Вы помещаете этот отрывок в строку.
Если Вы не хотите указывать что-нибудь кроме URL, и Вы не можете получить хорошие имена от сервера, можно предположить тип файла и попытаться получить, по крайней мере, значимые расширения.
err=0
n=1
while read -r url; do
if wget -O tmpfile "$url"; then
ext=data
case $(file -i tmpfile) in
application/pdf) ext=pdf;;
image/jpeg) ext=jpg;;
text/html) ext=html;;
text/*) ext=txt;;
esac
mv tmpfile "$n.$ext"
else
err=1
fi
n=$((n+1))
done
Добавьте другие типы, как желаемый. Если Ваш file
команда не имеет -m
опция, пропустите его и проверьте что file
возвраты в Вашей системе для типов файлов Вы интересуетесь. Если у Вас есть файл /etc/mime.types
в Вашей системе можно считать ассоциации типов MIME к расширениям от него вместо того, чтобы предоставить собственный список:
n=1
while read -r url; do
if wget -O tmpfile "$url"; then
mime_type=$(file -m tmpfile)
ext=$(awk "$1 == \"$mime_type\" {print \$2; exit} END {print \"data\"}" /etc/mime.types)
mv tmpfile "$n.$ext"
else
err=1
fi
n=$((n+1))
done
Вы могли циклично выполниться по записям в Вашем list_of_urls
. Что-то вроде этого:
while read -r url; do
wget -O foo $url
done < list_of_urls
Обратите внимание, что необходимо будет добавить собственный способ определить foo
для каждой записи list_of_urls
(также, я предполагаю, что это - файл на Вашем диске).
wget -O $2 $1
. В list_of_urls файле сделайте каждую строку URL, пробелом, имя файла (например, http://url1/blah&blah=whatever some.pdf
. Затем используйте то же как выше, заменяя wget строку ./thatscript.sh $url
. В этом случае $url
на самом деле строка с URL и именем файла, конечно.
– goldilocks
13.01.2013, 15:17
while read url; do read filename; wget -O $filename $url; done < list_of_urls
.
– goldilocks
13.01.2013, 17:07