Como criar somas de verificação sha1 de arquivos dentro de um arquivo tar no busybox sem usar muito espaço em disco

3

Eu gostaria de obter as somas de verificação sha1 de todos os arquivos dentro de um arquivo tar simples como uma lista.

Isso deve ser feito em uma máquina do tipo busybox, onde apenas um binário mínimo de alcatrão é disponível, veja link para o comandos disponíveis.

Sem usar o espaço em disco para descompactar o arquivo tar grande. Algo com piping e calcular o sha1 on the fly, direcionando a saída para / dev / null

Isso tornaria possível verificar backups sem copiar o arquivo pela rede ou extraí-lo, o que consome tanto o recurso.

Esta é basicamente a mesma pergunta que Como criar somas de verificação sha1 de arquivos dentro de um arquivo tar sem usar muito espaço em disco que tem uma ótima resposta, mas só percebi que o binário do busybox tar é uma versão mínima que não tem a opção --to-command=sha1sum .

    
por carparts 16.08.2016 / 14:17

2 respostas

1

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.

    
por 22.08.2016 / 19:18
2
tar tf test.tar|while read file;do echo $file $(tar xOf test.tar $file|sha1sum);done 
    
por 16.08.2016 / 14:45