Tmux is a very helpful terminal multiplexer, meaning it can split your terminal into multiple panes. So, create two side by side panes, then one way of doing it is:
- on the left, run
your cmd | tee >(grep 'denied' > error.log)
- on the right, run
tail -f error.log
The tee
process takes it’s standard in, and writes itbto both standard out, so you see all the lines, and the path it’s been given. The >(...)
operator runs the grep in a subprocess, and returns the path to it’s standard input pipe, so grep
receives every line, and writes the denied lines to a log file which you display with tail
in the other pane.
Rather than using a file for error.log you could also use a named pipe in much the same way.
Sorry for th slow answer, I’ve been away. There is a way, if it’s still useful to you:
First, create a named fifo, you only need to do this once:
mkfifo logview
Run your rsync in one pane, with a filtered view in the second:
tmux new 'rsync ...options... |& tee logview' \; split-window -h 'grep "denied" logview'
Replace
...options...
with your normal rsync command line.That should give you a split view, with all the normal messages on the left, and only messages containing ‘denied’ on the right.
The
|&
makes sure we capture both stdout and stderr,tee
then writes them to the fifo and displays them.split-window
tells tmux to create a second pane, and display the output of grep.