command like wc mas com tee behavior

4

Eu quero fazer backup de um banco de dados usando o comando psql e COPY . aqui está meu script:

psql "user=${USERNAME} host=${HOSTNAME} dbname=${DBNAME} password=${PASSWORD}" -c \
"COPY (SELECT * FROM tbl) ORDER BY id ASC) TO STDOUT WITH CSV HEADER;" | \
bzip2 -z -f --best -c > /home/${DBNAME}-${FILENAME}.csv.bz2

Além disso, quero saber quantas linhas são copiadas do banco de dados, mas o psql não possui esse recurso. então eu preciso de comando externo. Eu preciso de algo assim:

psql ... | wc -l | bzip2

Existe alguma solução? A única solução que encontrei é usar o fifo:

mkfifo /home/backup.fifo
psql ... | tee /home/backup.fifo | bzip2

Agora, a partir de outra janela de terminal, posso usar wc :

wc -l /home/backup.fifo
    
por Majid Azimi 08.04.2012 / 11:16

1 resposta

8

Tanto bash como zsh têm um recurso >(pipeline) :

psql ... | tee >(wc -l) | bzip2

Observe que o > aqui não é um redirecionamento normal, mas uma parte necessária da sintaxe. Você precisaria de um segundo > se quisesse combiná-lo com um redirecionamento real (com um espaço intermediário para que ele não fosse lido como >> redirect-for-append).

    
por 08.04.2012 / 11:23