Обычно в технологиях ошибочно принимать собственное фундаментальное невежество за недостаток технологии, о которой никто не знает.
Я проверил это и сразу обнаружил проблему:
wget уважает robots.txt, если явно не сказано не делать этого.
wget -r http://www.comp.brad.ac.uk/research/GIP/tutorials/index.html
--2015-12-31 12:29:52-- http://www.comp.brad.ac.uk/research/GIP/tutorials/index.html
Resolving www.comp.brad.ac.uk (www.comp.brad.ac.uk)... 143.53.133.30
Connecting to www.comp.brad.ac.uk (www.comp.brad.ac.uk)|143.53.133.30|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 878 [text/html]
Saving to: ‘www.comp.brad.ac.uk/research/GIP/tutorials/index.html’
www.comp.brad.ac.uk/research/GI 100%[======================================================>] 878 --.-KB/s in 0s
2015-12-31 12:29:53 (31.9 MB/s) - ‘www.comp.brad.ac.uk/research/GIP/tutorials/index.html’ saved [878/878]
Loading robots.txt; please ignore errors.
--2015-12-31 12:29:53-- http://www.comp.brad.ac.uk/robots.txt
Reusing existing connection to www.comp.brad.ac.uk:80.
HTTP request sent, awaiting response... 200 OK
Length: 26 [text/plain]
Saving to: ‘www.comp.brad.ac.uk/robots.txt’
www.comp.brad.ac.uk/robots.txt 100%[======================================================>] 26 --.-KB/s in 0s
2015-12-31 12:29:53 (1.02 MB/s) - ‘www.comp.brad.ac.uk/robots.txt’ saved [26/26]
FINISHED --2015-12-31 12:29:53--
Как видите, wget отлично выполнил то, о чем вы просили.
О чем говорится в файле robots.txt в этом случае?
cat robots.txt
User-agent: *
Disallow: /
Таким образом, этот сайт не хочет, чтобы роботы загружали данные, по крайней мере, те, которые читают и следят за файлом robots.txt, обычно это означает, что они не хотят для индексации в поисковых системах.
wget -r -erobots=off http://www.comp.brad.ac.uk/research/GIP/tutorials/index.html
Теперь, если wget просто слишком мощный, чтобы вы могли его изучить, это тоже хорошо, но не заблуждайтесь, думая, что ошибка в wget.
Однако существует риск выполнения рекурсивных загрузок сайта, поэтому иногда лучше использовать ограничения, чтобы избежать захвата всего сайта:
wget -r -erobots=off -l2 -np http://www.comp.brad.ac.uk/research/GIP/tutorials/index.html
-l2
означает максимум 2 уровня. -l
означает: уровень. -np
означает, что не нужно подниматься вверх по дереву, только с начальной страницы. -np
означает: без родителя. Это просто зависит от целевой страницы, иногда вы хотите точно указать, что получать, а что не получать, например, в этом случае вы получаете только расширения .html / .htm по умолчанию, а не графику, pdf-файлы, музыка / видео расширения. Параметр -A
позволяет добавлять типы расширений для захвата.
Между прочим, я проверил, и мой wget, версия 1.17, относится к 2015 году. Не уверен, какую версию вы используете. Python, кстати, я думаю, также был создан в 90-х годах, поэтому, по вашим рассуждениям, python также является мусором из 90-х.
Я признаю, что wget --help
довольно интенсивный и многофункциональный, как и справочная страница wget, поэтому понятно, почему кто-то не захочет ее читать, но существует множество онлайн-руководств, которые расскажу, как выполняются наиболее распространенные действия wget.
Основываясь на ответе Стефана Шазела , я придумал:
function alias_expand {
if [[ $ZSH_VERSION ]]; then
# shellcheck disable=2154 # aliases referenced but not assigned
[ ${aliases[$1]+x} ] && printf '%s\n' "${aliases[$1]}" && return
else # bash
[ "${BASH_ALIASES[$1]+x}" ] && printf '%s\n' "${BASH_ALIASES[$1]}" && return
fi
false # Error: alias not defined
}
(с bash 4.0 или новее ).
В моей среде zsh, когда я набираю alias
без команды, я получаю stdout
список всех псевдонимов. То же самое происходит в bash (на MacOS как ). Они имеют формуalias=expansion
Таким образом, вы можете продолжить фильтрацию с помощью sed :alias | sed -ne 's/cdh=\(.*\)$/\1/p'
, если "cdh" является псевдонимом, который вы хотите узнать. Вы можете сделать для этого функцию оболочки в своем профиле, если это обычная для вас задача :например
expand_alias() { alias $@ | sed -ne 's/^'$@'=\(.*\)$/\1/p' }
В zsh
вы можете просто использовать
get_alias() {
printf '%s\n' $aliases[$1]
}
С bash
(, предполагая, что он не находится в режиме POSIX, и в этом случае его alias
даст вывод, аналогичный zsh
), вы можете сделать:
get_alias() (
eval '
alias() { printf "%s\n" "${1#*=}"; }'"
$(alias -- "$1")"
)
По сути, мы оцениваем вывод alias
после переопределения alias
как функции, которая печатает то, что находится справа от первого =
в своем первом аргументе.
Вы можете использовать аналогичный подход для чего-то, совместимого с большинством оболочек POSIX, zsh
иbash
:
get_alias() {
eval "set -- $(alias -- "$1")"
eval 'printf "%s\n" "${'"$#"'#*=}"'
}
Как насчет определения функции оболочки:
EXA() { alias $@ | sed 's/^/expand_/; s/=/ == /; s/\o047//g; '; }
У моего zsh это было привязано к комбинации клавиш:
_expand_alias () {
local word expl tmp pre sel what
local -a tmpa suf
eval "$_comp_setup"
if [[ -n $funcstack[2] ]]
then
if [[ "$funcstack[2]" = _prefix ]]
then
word="$IPREFIX$PREFIX$SUFFIX"
else
word="$IPREFIX$PREFIX$SUFFIX$ISUFFIX"
fi
pre=()
else
local curcontext="$curcontext"
if [[ -z "$curcontext" ]]
then
curcontext="expand-alias-word:::"
else
curcontext="expand-alias-word:${curcontext#*:}"
fi
word="$IPREFIX$PREFIX$SUFFIX$ISUFFIX"
pre=(_main_complete - aliases)
fi
zstyle -s ":completion:${curcontext}:" regular tmp || tmp=yes
case $tmp in
(always) sel=r ;;
(yes | 1 | true | on) [[ CURRENT -eq 1 ]] && sel=r ;;
esac
zstyle -T ":completion:${curcontext}:" global && sel="g$sel"
zstyle -t ":completion:${curcontext}:" disabled && sel="${sel}${(U)sel}"
tmp=
[[ $sel = *r* ]] && tmp=$aliases[$word]
[[ -z $tmp && $sel = *g* ]] && tmp=$galiases[$word]
[[ -z $tmp && $sel = *R* ]] && tmp=$dis_aliases[$word]
[[ -z $tmp && $sel = *G* ]] && tmp=$dis_galiases[$word]
if [[ -n $tmp ]]
then
tmp=${tmp%%[[:blank:]]##}
if [[ $tmp[1] = [[:alnum:]_] ]]
then
tmpa=(${(z)tmp})
if [[ $tmpa[1] = $word && $tmp = $aliases[$word] ]]
then
tmp="\\$tmp"
fi
fi
zstyle -T ":completion:${curcontext}:" add-space || suf=(-S '')
$pre _wanted aliases expl alias compadd -UQ "$suf[@]" -- ${tmp%%[[:blank:]]##}
elif (( $#pre )) && zstyle -t ":completion:${curcontext}:" complete
then
$pre _aliases -s "$sel" -S ''
else
return 1
fi
}