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:)