É possível fazer o texto de saída do zcat mesmo se ele estiver descompactado? [duplicado]

17

O problema é que tenho alguns dumps de banco de dados que estão compactados ou em texto simples. Não há diferença na extensão de arquivo, etc. Usar zcat em arquivos não compactados produz um erro em vez da saída.

Existe talvez outro tipo de ferramenta cat que seja inteligente o suficiente para detectar que tipo de entrada ela recebe?

    
por rsk82 25.05.2014 / 18:28

5 respostas

24

Basta adicionar a opção -f .

$ echo foo | tee file | gzip > file.gz
$ zcat file file.gz
gzip: file: not in gzip format
foo
$ zcat -f file file.gz
foo
foo

(use gzip -dcf em vez de zcat -f se o seu zcat não é o GNU (ou emulado como GNU nos BSDs modernos) e só se conhece os arquivos .Z ).

    
por 25.05.2014 / 21:42
10

Uma sugestão portátil e simples seria usar zgrep em vez de zcat e usar um padrão de pesquisa que corresponda a todas as linhas.

zgrep $ some-file

Ao contrário de zcat , zgrep terá prazer em lidar com arquivos descompactados. Do homem zgrep:

zgrep - search possibly compressed files for a regular expression
    
por 25.05.2014 / 19:07
5

Com o GNU gzip você pode fazer zcat file 2> /dev/null || cat file . Isto não é padrão POSIX, e não funciona no BSD gzip , você realmente deve consertar seu sistema para que todos os arquivos gzip ped possuam a extensão .gz (obviamente arquivos de texto simples podem ter qualquer extensão, incluindo .gz ).

    
por 25.05.2014 / 18:50
2

Para adicionar minha conclusão dos comentários como resposta, acho que a melhor maneira mais compatível é usar

gzip -cdf [ name ... ]

É também assim que zless e zgrep fazem isso internamente.

    
por 26.05.2014 / 04:02
0

Uma alternativa no Bash:

for filename in *;do #Replace with your actual loop
    case $filename in
    *.gz) gunzip <"$filename";;
    *)    cat "$filename";;
    esac
done
    
por 25.05.2014 / 19:08

Tags