O comando que você está procurando é
mv * .[^.]* ..
ou (veja abaixo para mais informações):
(shopt -s dotglob; mv -- * ..)
Explicação: o comando mv move arquivos e diretórios. O último argumento para mv é o destino (neste caso, o diretório um passo "para cima" na árvore, .. ). Os argumentos anteriores são os arquivos e diretórios de origem. O asterisco ( * ) é um caractere curinga que corresponde a todos os arquivos que não iniciam com um ponto. Arquivos que começam com um ponto (dotfiles) estão "ocultos". Eles são correspondidos usando o padrão .[^.]* (veja a edição abaixo).
Veja a página de manual que eu vinculei para mais informações sobre mv .
Por que .[^.]* em vez de .* ?
Como Chris Johnsen aponta corretamente: o padrão .* também corresponde a . e .. . Como você não quer (e não pode) movê-los, é melhor usar um padrão que corresponda a qualquer nome de arquivo começando com um ponto exceto aqueles dois . O padrão .[^.]* faz exatamente isso: ele combina qualquer nome de arquivo (1) começando com um ponto (2) seguido por um caractere que é não um ponto (3) seguido por zero ou mais caracteres arbitrários.
Como Paggas aponta , nós também teríamos que adicionar o padrão .??* para combinar arquivos começando com dois pontos. Veja a resposta dele para uma solução alternativa usando find .
Arjan's answer menciona shopt para evitar todos esses problemas com dotfiles. Mas ainda há o problema com os arquivos que começam com um traço. E isso requer três comandos. Ainda assim, gosto da ideia. Eu proponho usá-lo assim:
(shopt -s dotglob; mv -- * ..)
Isso executa shopt em uma subshell (portanto, não é necessária uma segunda chamada para shopt ) e usa -- para que os arquivos iniciados com um traço não sejam interpretados como argumentos para mv .