#!/bin/bash usage() { cat << EOF Usage: $0 [-d ] [ .. ] EOF } depth="1" while getopts "hd:" OPTION do case $OPTION in h) usage exit ;; d) depth="$OPTARG" ;; *) usage >&2 exit 1 ;; esac done shift $(($OPTIND - 1)) if [ "$#" -eq 0 ]; then usage >&2 exit 1 fi tmpdir=`mktemp -d` trap "rm -rf '$tmpdir'" EXIT keys="$*" gpg --recv-keys $keys while [ "$depth" -gt 0 ]; do keys=$(gpg --with-colons --fast-list-mode --list-sigs $keys | awk -F ':' '$1 ~ /sig|rev/ {print $5}' | sort -u) recv="" for k in $keys; do if ! [ -e "$tmpdir/$k" ]; then recv="$recv $k" touch "$tmpdir/$k" fi done if [ -z "$recv" ] ; then break fi gpg --recv-keys $recv depth=$((depth - 1)) done