wc와 유사하지만 티 동작이 있는 명령

wc와 유사하지만 티 동작이 있는 명령

psql및 명령을 사용하여 데이터베이스를 백업하고 싶습니다 COPY. 이것은 내 스크립트입니다.

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

또한 데이터베이스에서 몇 개의 행이 복사되었는지 알고 싶지만 psql에는 그러한 기능이 없습니다. 그래서 외부 명령이 필요합니다. 다음과 같은 것이 필요합니다.

psql ... | wc -l | bzip2

해결책이 있나요? 내가 찾은 유일한 해결책은 fifo를 사용하는 것입니다.

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

이제 다른 터미널 창에서 다음을 사용할 수 있습니다 wc.

wc -l /home/backup.fifo

답변1

둘 다 하나의 특징이 bash있습니다 .zsh>(pipeline)

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

이는 >일반적인 리디렉션이 아니라 구문의 필수 부분입니다. >이것을 실제 리디렉션("추가를 위한 리디렉션"으로 읽히지 않도록 중간에 공백이 있음)과 결합하려면 >>1초가 필요합니다.

관련 정보