concatenando 2 comandos com tar (wc -l + echo ok || echo fail)

0

Eu quero fazer duas coisas com um arquivo tar.gz:

  1. Verifique se há falha
  2. Se for bem-sucedido, verifique o número de arquivos extraídos

Eu encontrei isso para a primeira opção. Agora executo meu comando assim: tar -xvzf bad_file.tar.gz && echo ok || echo fail e ecoa todos os erros + falha no final, que é o que eu quero.

Para a segunda parte, usei tar -xvzf bad_file.tar.gz | wc -l , que funcionou bem, mas retornou o número de arquivos, mesmo que tenha ocorrido um erro.

Exemplo para a 2ª parte (eu abri o arquivo em um editor e apenas removi uma linha):

[root@zt avi]# tar -xvzf damaged_file.tar.gz | wc -l

gzip: stdin: invalid compressed data--crc error

gzip: stdin: invalid compressed data--length error
tar: Unexpected EOF in archive
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now
3

Como posso combinar esses dois comandos?

    
por CIsForCookies 15.10.2018 / 09:45

1 resposta

1

Teste a extração do arquivo separadamente, depois conte o número de arquivos, se for bem-sucedido. Se você não souber o nome do diretório em que o arquivo é extraído, crie um novo diretório e extraia o arquivo lá. Talvez algo assim:

#!/bin/sh

if [ -d extracted ]; then
    echo 'please remove directory "extracted"' >&2
    exit 1
fi

mkdir extracted
if ! tar -xvz -f bad_file.tar.gz -C extracted; then
    echo 'extraction failed' >&2
    echo 'directory "extracted" may contain partially extracted archive' >&2
    exit 1
fi

# extraction of archive was successful, count files extracted
find extracted -type f -exec echo . ';' | wc -l

O find no final gera um ponto para cada arquivo no diretório extracted . wc -l conta o número de pontos. Fazemos isso desta forma, caso um nome de caminho no diretório extraído contenha uma nova linha incorporada.

    
por 15.10.2018 / 09:56

Tags