Se você tiver um diretório superior e nada, você pode simplesmente lembrar quais diretórios existem antes de executar o tar, e ver o que você tem depois disso, assumindo que ninguém mais tenha alterado esse diretório.
# ksh terminology: set -A BEFORE .*/ */
BEFORE=(.*/ */)
tar -xf blah blah blah
AFTER=(.*/ */)
# We can make it O(n), since glob outputs can be assumed to be sorted.
# Do it.
for (( i = 0; i < "${#BEFORE[@]}"; i++ )); do
[ "${BEFORE[i]}" == "${AFTER[i]}" ] || break
done
cd "${AFTER[i]}"
Isso deve funcionar com todos os shells que tem aritmética for , arrays começando com um índice zero e com ${#arr[@]} para acessar a contagem de membros do array.
Na verdade, existe um problema, pois */ pode se expandir para literalmente */ quando não há correspondência. Em bash (assumindo que você está usando bash por causa de sua tag), você pode definir shopt -s nullglob para isso.
Usar */ restringe os itens globbed aos diretórios, assim você não se preocupará com arquivos - Arquivos extras ainda fazem dele apenas um diretório:)