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

どちらにも1つの特徴がbashあります。zsh>(pipeline)

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

これは>一般的なリダイレクトではなく、構文の必須部分です。>これを実際のリダイレクト(「追加のリダイレクト」として読み込まないように途中にスペースがある)と組み合わせるには>>1秒が必要です。

おすすめ記事