Einige Wochen zum Download vor fand ich in dieser Seite eine sehr nützliche Bash-Skript, die Bilder von Google Bildergebnisse herunterlädt (download images from google with command line)Bash-Skript von google images
Obwohl das Skript ganz für mich kompliziert ist, habe ich einige einfache Änderungen, um die Ergebnisse nicht umzubenennen, um die ursprünglichen Namen beizubehalten.
Seit der letzten Woche hat das Skript jedoch aufgehört zu funktionieren ... wahrscheinlich hat Google den Code oder etwas aktualisiert, und die Regexes des Skripts analysieren die Ergebnisse nicht mehr. Ich weiß nicht genug über Googles Codes, Webprogrammierung oder Regexing, um zu sehen, was falsch ist, obwohl ich einige fundierte Vermutungen angestellt habe, aber immer noch nicht funktioniert habe.
My (Abschaltbetriebsart) gezwickt Skript ist dies
#! /bin/bash
# function to create all dirs til file can be made
function mkdirs {
file="$1"
dir="/"
# convert to full path
if [ "${file##/*}" ]; then
file="${PWD}/${file}"
fi
# dir name of following dir
next="${file#/}"
# while not filename
while [ "${next//[^\/]/}" ]; do
# create dir if doesn't exist
[ -d "${dir}" ] || mkdir "${dir}"
dir="${dir}/${next%%/*}"
next="${next#*/}"
done
# last directory to make
[ -d "${dir}" ] || mkdir "${dir}"
}
# get optional 'o' flag, this will open the image after download
getopts 'o' option
[[ $option = 'o' ]] && shift
# parse arguments
count=${1}
shift
query="[email protected]"
[ -z "$query" ] && exit 1 # insufficient arguments
# set user agent, customize this by visiting http://whatsmyuseragent.com/
useragent='Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:31.0) Gecko/20100101 Firefox/31.0'
# construct google link
link="www.google.cz/search?q=${query}\&tbm=isch"
# fetch link for download
imagelink=$(wget -e robots=off --user-agent "$useragent" -qO - "$link" | sed 's/</\n</g' | grep '<a href.*\(png\|jpg\|jpeg\)' | sed 's/.*imgurl=\([^&]*\)\&.*/\1/' | head -n $count | tail -n1)
imagelink="${imagelink%\%*}"
# get file extention (.png, .jpg, .jpeg)
ext=$(echo $imagelink | sed "s/.*\(\.[^\.]*\)$/\1/")
# set default save location and file name change this!!
dir="$PWD"
file="google image"
# get optional second argument, which defines the file name or dir
if [[ $# -eq 2 ]]; then
if [ -d "$2" ]; then
dir="$2"
else
file="${2}"
mkdirs "${dir}"
dir=""
fi
fi
# construct image link: add 'echo "${google_image}"'
# after this line for debug output
google_image="${dir}/${file}"
# construct name, append number if file exists
if [[ -e "${google_image}${ext}" ]] ; then
i=0
while [[ -e "${google_image}(${i})${ext}" ]] ; do
((i++))
done
google_image="${google_image}(${i})${ext}"
else
google_image="${google_image}${ext}"
fi
# get actual picture and store in google_image.$ext
wget --max-redirect 0 -q "${imagelink}"
# if 'o' flag supplied: open image
[[ $option = "o" ]] && gnome-open "${google_image}"
# successful execution, exit code 0
exit 0
Ich empfehle Ihnen [ShellCheck] (http://www.shellcheck.net/) es ein Update Ihre Frage entsprechend, wenn Sie immer noch Schwierigkeiten haben. Debuggen Sie auch Ihr Skript und sehen Sie, was geparst werden muss. Versuchen Sie, das Parsen von XML mit REs und EREs zu vermeiden. Verwenden Sie stattdessen einen XML-Parser wie 'xmlstarlet'. –