Isso responde à pergunta "por que isso acontece?"
Sim, somefile.txt será realmente criado antes que ls seja executado.
$ utility >file
A primeira coisa que acontece é que o shell percebe o redirecionamento, cria file (ou trunca se já existir), então executa utility com seu fluxo de saída padrão entrando em file .
O utilitário geralmente não está ciente ou preocupado com onde sua saída padrão está indo (alguns, como ls , verificam se é um TTY ou não e mudam seu comportamento de acordo), então não importa seja escrevendo para um arquivo, canal, arquivo de dispositivo ou soquete comum. Certamente não está preocupado em criar este arquivo. Portanto, o trabalho do shell é garantir que o encanamento esteja em vigor antes que o processo seja iniciado, o que inclui a criação ou o truncamento do arquivo denominado file no exemplo acima.
Para as respostas que tratam do problema relacionado à exclusão de todos os arquivos, exceto os mais recentes, consulte a pergunta " remove os arquivos mais antigos "