#!/usr/bin/env sh dl() { while read -r feed; do printf "Processing %s\n" "$feed" curl -s "$feed" | xmllint --format - 1> /tmp/sfeed 2> /dev/null title="$(grep -m 1 title /tmp/sfeed | \ xmllint --xpath "string(//title)" - 2> /dev/null)" domain=$(echo "$feed" | cut -d/ -f 3) fname=$(echo "${title:-$domain}" | sed 's|/|!|g' | head -c 25) sfeed < /tmp/sfeed > "$cachedir/$fname" done < "$1" } trap 'trap - SIGTERM && kill -- -$$' INT TERM EXIT file=${1:-$HOME/org/feeds} total=$(wc -l "$file" | cut -d " " -f 1) cachedir=${XDG_CACHE_HOME:-$HOME/.cache/}/sfeed threads=${2:-4} pere=$(($((total + threads - 1)) / threads)) mkdir -p "$cachedir/split" (cd "$cachedir/split" || exit; split -l "$pere" "$file") for j in "$cachedir/split"/*; do dl "$j" & done wait rm -rf /tmp/sfeed "$cachedir/split" sfeed_curses "$cachedir"/*