comando como wc, mas com comportamento tee

comando como wc, mas com comportamento tee

Quero fazer backup de um banco de dados usando psqlum COPYcomando. aqui está meu roteiro:

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

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

psql ... | wc -l | bzip2

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

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

Agora, em outra janela do terminal, posso usar wc:

wc -l /home/backup.fifo

Responder1

Ambos bashe zshtêm um >(pipeline)recurso:

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

Observe que >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 entre eles para que não fosse lido como >>redirecionamento para acréscimo).

informação relacionada