Quanto a mim, uma maneira mais segura de usar find
find dir/* -prune -type d -name "[a-y]" ! -name "z" -exec mv -t dir/z {} +
Existe um diretório dir/ . Contém subdiretórios a - z . Eu preciso mover subdiretórios a - y no subdiretório z .
Se isso for difícil, então não a - z , mas fornecendo uma lista de diretórios que precisam ser movidos.
Como posso fazer isso no bash?
Use a expansão de chaves: link
Para o seu caso, faça:
mv {a..y} z/
Se você tiver uma lista de diretórios, digamos dir1 , dir2 e dir3 , faça algo como:
mv -t z/ dir1 dir2 dir3
Ou talvez:
mv -t z/ dir{1..3}
-t option significa "alvo". Geralmente é usado para evitar confusão em casos que envolvam o movimento de vários arquivos / diretórios. {1..15} imprime todos os números de 1 a 15 e {a..f} imprimirá todos os alfabetos de a até f . Nota: essa não é a maneira mais limpa de fazer isso (veja a resposta dos shivams para isso), e apenas funciona se você tiver os diretórios a-z dentro de dir .
Eu sempre usei o mais fácil de lembrar
mv * z
que, claro, reclama que
mv: cannot move ‘z’ to a subdirectory of itself, ‘z/z’
mas faz o que você quer.
Isso se aplica (pelo menos) a GNU coreutils