Basta inserir unbuffer antes de qualquer comando para fazê-lo pensar que está gravando em uma saída interativa, mesmo que esteja realmente inserindo em outro executável. Isso preservará a cor no caso de ls .
Por exemplo
unbuffer ls -l --color=auto | tee output.log
Se você ainda não o instalou, no Ubuntu e em outras distribuições Linux do Debian você pode instalar unbuffer fazendo.
sudo apt-get install expect-dev