Befehl wie WC, aber mit Tee-Verhalten

Befehl wie WC, aber mit Tee-Verhalten

Ich möchte eine Datenbank mit psqleinem COPYBefehl sichern. Hier ist mein Skript:

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

Außerdem möchte ich wissen, wie viele Zeilen aus der Datenbank kopiert werden, aber psql hat diese Funktion nicht. Ich brauche also einen externen Befehl. Ich brauche so etwas wie das hier:

psql ... | wc -l | bzip2

Gibt es eine Lösung? Die einzige Lösung, die ich gefunden habe, ist die Verwendung von FIFO:

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

Jetzt kann ich von einem anderen Terminalfenster aus Folgendes verwenden wc:

wc -l /home/backup.fifo

Antwort1

Beide bashund zshhaben eine >(pipeline)Funktion:

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

Beachten Sie, dass es sich >hier nicht um eine normale Umleitung handelt, sondern um einen notwendigen Teil der Syntax. Sie benötigen ein zweites, >wenn Sie es mit einer tatsächlichen Umleitung kombinieren möchten (mit einem Leerzeichen dazwischen, damit es nicht als >>Umleitung zum Anhängen gelesen wird).

verwandte Informationen