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á:
-
find
search -
.
no diretório atual -
-maxdepth 1
com uma profundidade de 1 (portanto, nenhum subdiretório) -
type -f
apenas arquivos -
! -name "*.*"
em que o nome do arquivo não corresponde a*.*
-
-exec mv -t ./tree/ {} \+
executa o comandomv
, o argumento-t
especifica o diretório de destino (tree
no 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á).