Я хотел бы создать короткий, но приятный скрипт для wget для использования файла .list. Подвох в том, что я хотел бы установить каталоги, в которые эти файлы попадают.
Пример:
file: url.list
[group 1]
http://www.somehost.com/files/tool.7z
http://www.someotherhost.com/files/icon36.png
[group 2]
http://www.idunno.net/other-tool.tar.gz
http://265.265.265.265/config.ini
http://www.myownsite.com/tools/script-to-run-tool.cmd
eof
([группа 1] и [группа 2] просто здесь для удобства чтения, они НЕ в моем файл реального списка) (да, я знаю, что 265 не является реальным, вот почему это пример)
(в настоящее время используется, который не может анализировать папки) wget --continue - timestamping --content-disposition -i url .list
Конечно, в данный момент все 5 файлов загружаются в один каталог. у меня вопрос, есть ли способ сказать wget использовать другую папку для группы 1 и для группы 2, в моем случае я хотел бы, чтобы это захватило несколько инструментов, которые я использую на работе, у меня есть отдельный скрипт в windows это создает USB-ключ winpe и внедряет все инструменты в этих каталогах в ключ.
Итак, мой главный вопрос, можно ли сделать это очень просто, или для этого нужно, чтобы я использовал полный сценарий bash, чтобы захватить их и создать папки, в которые они могли бы войти и переместить их туда? (используя -o в винтах wget с моей меткой времени, а метки времени критически важны)
в теории, когда это закончится, я хотел бы получить свежую копию (псевдонимов):
tools/cool-tool/tool.7z
tools/cool-tool/icon36.png
tools/special-tool/other-tool.tar.gz
tools/special-tool/config.ini
tools/special-tool/script-to-run-tool.cmd
Создайте список, в котором URL и целевой каталог находятся в одной строке:
http://www.somehost.com/files/tool.7z tools/cool-tool/
http://www.someotherhost.com/files/icon36.png tools/cool-tool/
http://www.idunno.net/other-tool.tar.gz tools/special-tool/
http://265.265.265.265/config.ini tools/special-tool/
http://www.myownsite.com/tools/script-to-run-tool.cmd tools/special-tool/
Затем используйте цикл bash
, чтобы прочитать файл и передать его в wget:
while read url target; do
wget "$url" -P "$target";
done < url.list
Вы должны иметь возможность делать то, что хотите, с помощью опции wget -P
или --directory-prefix
-P prefix
--directory-prefix=prefix
Set directory prefix to prefix. The directory prefix is the
directory where all other files and subdirectories will be saved
to, i.e. the top of the retrieval tree. The default is . (the
current directory).
. Существует ряд других опций для управления обработкой любых компонентов исходного каталога, которые Это также может быть полезно в зависимости от того, скачиваете ли вы отдельные файлы или используете рекурсивные wget - см. раздел Directory Options
на страницах man wget.
Я придумал это:
wgetfiles.sh
:
filename="$1"
while read -r line
do
if [[ "$line" =~ (https?|ftp)\:\/\/ ]]
then
wget "$line" -P "$currdir";
else
currdir="$line"
if [ ! -d "$currdir" ]; then
mkdir "$currdir"
fi
fi
done < "$filename"
для текстового файла с любым именем:
file.txt
:
Dir 1
http://www.somehost.com/files/tool.7z tools/cool-tool/
https://www.someotherhost.com/files/icon36.png tools/cool-tool/
Dir 2
http://www.idunno.net/other-tool.tar.gz tools/special-tool/
https://265.265.265.265/config.ini tools/special-tool/
Dir 3
ftp://www.myownsite.com/tools/script-to-run-tool.cmd tools/special-tool/
Это позволяет использовать любой текстовый файл, содержащий имя каталога, за которым следуют несколько ссылок. Он создает каталоги, если они еще не существуют. Проверка не выполняется, поэтому убедитесь, что у каталогов следуют ссылки, как показано.
1121 Просто небольшое дополнение. Эта строка будет охватывать многие ситуации:
wget "$line" -e robots=off -r -l 1 -nd -nc --wait 1 −−random−wait -R html,"index.*" -P "$currdir"
Она будет игнорировать robots.txt
(-e robots=off
), возвращаться в каталог, если ссылка на каталог (-r -l 1
), не будет загружать иерархия каталогов с сайта - только файлы (-nd
), не будут загружать уже загруженные файлы (-nc
), будут случайным образом ждать загрузки следующего файла, чтобы дополнительно помочь застраховаться от отклонения с сайта (--wait 1 −−random−wait
) и не будет загружать html
файлы или файлы вида index.*
(-R html,"index.*"
).
Кроме того, чтобы создать иерархию каталогов, как Dir 1/subdir 1/sub-subdir 1
:
mkdir -p "$currdir"