Ho una lunga lista di URL. Contenuti all'interno di ciascuna di queste pagine Web, ci sono collegamenti che devo estrarre. L'azione di Automator Ottieni URL di collegamento da pagine Web è un'azione molto utile per questa attività. Sfortunatamente Automator non gestisce molto bene i carichi di lavoro pesanti e molto spesso si blocca o si blocca indefinitamente. Come posso andare su questo utilizzando Bash tramite l'app Terminal di Mac OS X?
Modifica: questo è lo script attuale così com'è adesso.
#!/bin/bash
echo "Enter up to 3 words"
read -p "" v1 v2 v3
web="$HOME/web.txt"
tmp="$HOME/tmp.txt"
err="$HOME/err.txt"
fin="$HOME/fin.txt"
arc="$HOME/arc.txt"
n="$(awk 'END {print NR}' "$web")"
echo "Processing $n URLs..."
grep 'http' "$web" | \
while read -r url; do
lynx -nonumbers -hiddenlinks=merge -dump -listonly "$url" 2>>"$err" | awk '!a[$0]++' >> "$tmp"
sleep 1
n=$((n-1))
[[ $n -gt 0 ]] && echo "$n URLs left to process..." || echo "Processing Completed!"
done
grep -e "$v1" -e "$v2" -e "$v3" "$tmp" | sort -u | cat > "$fin"
cat "$fin" >> "$arc"
for r in "Results This Session"; do echo "$(cat "$fin" | wc -l)" "$r"; done
for a in "URL's Archived"; do echo "$(cat "$arc" | wc -l)" "$a"; done
Ho aggiunto read -p
all'inizio dello script. Ci sono limitazioni sul numero di variabili che possono essere utilizzate in questo modo? Ho utilizzato con successo fino a 9 test. E c'è un modo più pratico per scrivere questo? Ho provato read -p "" {v1..v9}
che non ha funzionato. Ho aggiunto un paio di cicli for
alla fine per indicare quanti dati sono stati elaborati.
Problemi attuali
-
a volte viene visualizzato un errore
sort: string comparison failed: Illegal byte sequence sort: Set LC_ALL='C' to work around the problem.
tuttavia quando aggiungi
LS_ALL=C
allo script, questo non sembra corretto.