There is a concept in bash called process substitution. You can run a command and use the output as a file.
e.g.
$ cat -n <(seq 3|tac)
1 3
2 2
3 1
I am curious why the following fails;
$ du -sk <(xzcat /var/log/mpd/scribble.log.xz )
0 /dev/fd/63
Similarly, we have this
$ file <(seq 1 2)
/dev/fd/63: broken symbolic link to pipe:[32560687]
The file is not empty.
$ xzcat /var/log/mpd/scribble.log.xz | wc -c
16877047
>/dev/null pv <(xzcat /var/log/mpd/scribble.log.xz )
16.1MiB 0:00:00 [ 232MiB/s] [ <=> ]
As a bonus question, do you know a technique in bash to masquarade fifos as regular files for a short duration?