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