summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKylie McClain <somasissounds@gmail.com>2015-03-05 02:22:52 -0500
committerKylie McClain <somasissounds@gmail.com>2015-03-05 02:27:40 -0500
commit8168d986b507ec3a058050bf7aca09b69580bbbc (patch)
treee2e62d32ebbd99b3b48be46393f99907752a5724
downloadwget-curl-8168d986b507ec3a058050bf7aca09b69580bbbc.tar.gz
wget-curl-8168d986b507ec3a058050bf7aca09b69580bbbc.tar.xz
wget-curl-8168d986b507ec3a058050bf7aca09b69580bbbc.zip
initial commit
-rw-r--r--LICENSE13
-rwxr-xr-xwget184
2 files changed, 197 insertions, 0 deletions
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..ee783e2
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,13 @@
+Copyright (c) 2015, Kylie McClain <somasissounds@gmail.com>
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/wget b/wget
new file mode 100755
index 0000000..ed517d6
--- /dev/null
+++ b/wget
@@ -0,0 +1,184 @@
+#!/bin/bash
+# wget-curl, a curl wrapper acting as a wget drop-in replacement - version git-HEAD
+# Usage: wget [wget args] [i need to fill this in later] <url(s)>
+# Download all URLs given using curl, but using wget's options.
+#
+#
+# End of help.
+# Copyright (c) 2015, Kylie McClain <somasissounds@gmail.com>
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# End of copyright.
+#
+
+set -o pipefail
+shopt -u shift_verbose >/dev/null 2>&1
+
+help() {
+ sed -n '/^#/!d;s/^# //;s/^#//;3,${p;}' "$0" | \
+ while IFS= read help_line;do
+ if [[ "$help_line" == "End of help." ]];then
+ exit 0
+ else
+ printf "%s\n" "$help_line"
+ fi
+ done
+ exit 0
+}
+
+version() {
+ sed 's/^# //;s/, .* - version / /;2q;$!d' "$0"
+ copyright
+ exit 0
+}
+
+copyright() {
+ sed -n '/^#/!d;s/^# //;s/^#//;/End of help./,${p;}' "$0" | \
+ while IFS= read copyright_line;do
+ if [[ "$copyright_line" == "End of help." ]];then
+ true
+ elif [[ "$copyright_line" == "End of copyright." ]];then
+ break
+ else
+ printf '%s\n' "$copyright_line"
+ fi
+ done
+}
+
+stderr() {
+ printf "$@" >&2
+}
+
+error() {
+ stderr "$0: $1\n"
+ exit "$2"
+}
+
+invalid_arg() {
+ error "invalid option -- '$1'" 2
+}
+
+append_opt() {
+ for opt in $@;do
+ CURL_OPTS="${CURL_OPTS} ${opt}"
+ done
+}
+
+curl() {
+ eval "command curl $@ ${CURL_RAW}"
+}
+
+append_raw_arg() {
+ CURL_RAW="$CURL_RAW $@"
+}
+
+has_opt() { # exit 0 if CURL_OPTS has arg, non-zero if doesn't
+ if [[ "$CURL_OPTS" == *" $1"* ]];then
+ return 0
+ else
+ return 1
+ fi
+}
+
+reexec_without() { # download afterwards without $1 in OPTS
+ reexec_args_without="$reexec_args_without $@"
+ reexec=1
+}
+
+reexec_only() {
+ for arg in $@;do
+ CURL_OPTS_REEXEC_ONLY="${CURL_OPTS_REEXEC_ONLY} $arg"
+ done
+}
+
+print_url() {
+ has_opt -s || printf "%s\n" "$1"
+}
+
+# 46ABDFHIKLNOPQRSTUVXabcdhiklm nH nc nd np nv opqrtvwx
+while getopts ':46ABDFHIKLNO:PQRST:U:VXa:bcdhiklmopqrtvwx' argument "$@";do
+ case "$argument" in
+ # a lot of these are noop right now because they are wget mirror args
+ # which curl doesn't really do, and i am not sure if i should implement them
+ 4) append_opt -4 ;;
+ 6) append_opt -6 ;;
+ A) true ;; # probably can't implement this easily...
+ B) true ;;
+ D) true ;;
+ E) true ;;
+ F) true ;; # curl doesn't care what the input is
+ H) true ;;
+ I) true ;;
+ K) true ;;
+ L) true ;;
+ N) true ;;
+ O) append_opt "-o $OPTARG" ;;
+ P) true ;;
+ Q) true ;;
+ R) true ;;
+ S) append_opt -I;reexec_without -I -s ;;
+ T) append_opt "-m $OPTARG" ;;
+ U) append_opt "--user-agent \"$OPTARG\"" ;;
+ V) version; curl --version; exit 0 ;;
+ X) true ;;
+ a) append_raw_arg "2>&1 | tee -a $OPTARG" ;;
+ b)
+ wget_log="wget-log"
+ i=1
+ while [[ -f "${wget_log}" ]];do
+ # if that exists, increment until we find something that doesn't
+ i=$(($i+1))
+ wget_log="wget-log.${i}"
+ done
+ append_raw_arg ">\"$wget_log\" 2>&1 &"
+ printf "Continuing in background, pid %s.\nOutput will be written to '$wget_log'.\n" "$$"
+ ;;
+ c) append_opt "-C -" ;;
+ d) append_opt "-v" ;;
+ e) true ;;
+ h) help ;;
+ i)
+ [[ ! -f "$OPTARG" ]] && error "$OPTARG does not exist" 3
+ for url in $(<"$OPTARG");do
+ URLS=( ${URLS[@]} "$url" )
+ done
+ ;;
+ q) append_opt "-s" ;;
+ esac
+ shift $(($OPTIND-1))
+done
+
+# set wget default equivilants
+append_opt -L # follow redirects
+append_opt -# # progress bar
+
+if [[ -z "${URLS[@]}" ]];then
+ URLS=( ${@} )
+fi
+
+for url in ${URLS[@]};do
+ url_file=${url##*/}
+ if [[ "$url" == "$url_file" ]];then
+ # has no remote file name and -o is not in CURL_OPTS... assume index.html
+ has_opt -o || append_opt "-o index.html"
+ fi
+
+ eval "print_url '$url';curl ${CURL_OPTS} -- $url"
+ if [[ "$reexec" ]];then
+ for reexec_arg in ${reexec_args_without};do
+ CURL_OPTS_REEXEC=$(echo "${CURL_OPTS_REEXEC:-$CURL_OPTS}" | sed "s# $reexec_arg##")
+ done
+ eval "print_url '$url';curl ${CURL_OPTS_REEXEC} ${CURL_OPTS_REEXEC_ONLY} -- $url"
+ fi
+done