Tanto quanto sei, isso é impossível. O shell lê da direita para a esquerda, portanto, se 2> error
existir. um arquivo error
será criado. Eu não acho que haja alguma maneira de contornar isso.
Você pode fazer alguns truques complexos, como usar um pipe nomeado e testar sua saída, mas acho que não vale a pena. Em vez disso, eu usaria inotify
como explicado em outra resposta ou criaria arquivos tmp e os copiaria para um local diferente se eles contiverem dados.
tmp=$(mktemp); command 2> "$tmp"; [ -s "$tmp" ] && cp "$tmp" /path/to/log/files