Aqui estão alguns problemas importantes com esta solução:
tar tf test.tar|while read file;do echo $file $(tar xOf test.tar $file|sha1sum);done
1-O tar do busybox não pode mostrar nomes de arquivo diferentes com novas linhas.
2-O "read" de shells não controla corretamente a barra invertida. ("\" caracteres são comidos ou "\ n" é substituído por um novo caractere de linha)
Variáveis 3-shell sem aspas duplas comem caracteres de espaço repetidos.
Não consigo corrigir o problema 1.
De qualquer forma, posso corrigir 2 e 3.
Crie este script de shell: "tarsha1.sh" (não se esqueça de "chmod 755 tarsha1.sh")
#!/bin/sh
tarname="$1"
shift
for filename in "$@"
do tar xOf "$tarname" "$filename" | sha1sum | head -c -3
printf '%s\n' "$filename"
done
Em seguida, use este comando:
tar tf test.tar | tr '\n' 'tar tf test.tar|while read file;do echo $file $(tar xOf test.tar $file|sha1sum);done
' | xargs -0 -r ./tarsha1.sh test.tar
Com isso você deve ser capaz de manipular nomes de arquivos com qualquer caractere, exceto novas linhas ("\ n").
Nota: a opção "-0" para xargs deve ser ativada nas opções de compilação do busybox.