#!/bin/sh error () { echo >&2 "error: $@" exit 1 } find_embedded_trash () { while read -r line do case "$line" in *Start\ of\ trash\ directory\ of\ \'t[0-9][0-9][0-9][0-9]-*\':*) test_name="${line#*\'}" test_name="${test_name%\'*}" return 0 esac done return 1 } extract_embedded_trash () { while read -r line do case "$line" in *End\ of\ trash\ directory\ of\ \'$test_name\'*) return ;; *) printf '%s\n' "$line" ;; esac done error "unexpected end of input" } # Raw logs from Linux build jobs have CRLF line endings, while OSX # build jobs mostly have CRCRLF, except an odd line every now and # then that has CRCRCRLF. 'base64 -d' from 'coreutils' doesn't like # CRs and complains about "invalid input", so remove all CRs at the # end of lines. sed -e 's/\r*$//' | \ while find_embedded_trash do echo "Extracting trash directory of '$test_name'" extract_embedded_trash |base64 -d |tar xzp done