Não há cache porque o comando mv nem sequer vê o caractere curinga.
O que acontece é que a linha de comando expande o curinga e passa a lista expandida para mv
Então, se você tivesse foo/1' and foo / 2 and foo / 3 ', então rodando
mv foo/* bar/
expandirá e na verdade será executado
mv foo/1 foo/2 foo/3 bar/
Quando o shell terminar a expansão e começar a executar o comando mv , qualquer alteração no diretório foo (por exemplo, foo/4 é adicionado) não fará parte do comando e será deixada para trás.
Esse processo é conhecido como globbing .