Isso porque você está usando caracteres especiais em seu script. Você terá que escapar deles.
Você pode usar melhor find para isso:
find . -maxdepth 1 -type f ! -name "*.*" -exec mv -t ./tree/ {} \+
Este comando irá:
-
findsearch -
.no diretório atual -
-maxdepth 1com uma profundidade de 1 (portanto, nenhum subdiretório) -
type -fapenas arquivos -
! -name "*.*"em que o nome do arquivo não corresponde a*.* -
-exec mv -t ./tree/ {} \+executa o comandomv, o argumento-tespecifica o diretório de destino (treeno diretório atual (.)) e acrescenta (\+) o nome do arquivo ({}) a ele.
Isso funcionará no seu script bash e não tentará mover diretórios ou seu próprio diretório tree para si mesmo (o que seu comando mv tentará).