Infelizmente, a resposta de Matt e A resposta de Nicole apresenta um estilo ruim e será quebrada se qualquer uma das pastas contiver um único caractere de espaço em branco, um caractere globbing (como *
) ou uma nova linha. A execução de for item in $(ls …)
é um grande erro que se pode cometer, porque será mais rápido ou mais tarde, e iterar sobre nomes de arquivos, não emiti-los corretamente pode causar todos os tipos de problemas.
Nunca analise a saída de ls
.
Há uma ferramenta no Linux para encontrar arquivos que correspondam a determinados critérios e é chamada de find
:
find . -mindepth 1 -maxdepth 1 \
-type d ! -regex ".\/bar$" \
-exec mv '{}' ./bar/ \;
Isso moverá todos os diretórios no diretório de trabalho atual que não são chamados bar
into ./bar/
. Ele funcionará mesmo que os nomes dos diretórios contenham espaços, caracteres globbing ou newlines.
A expressão regular .\/bar$
corresponderá apenas ao diretório chamado ./bar
e será negada por !
.