Existem três maneiras que considero fazer isso.
Hacky e alimentado por erros, "MOVE TODAS AS COISAS"
mv ~/MYDIR/* ~/MYDIR/DESTINATIONDIR
Isso tentará mover o destino para si mesmo e explodirá:
mv: cannot move ‘~/MYDIR/DESTINATIONDIR’ to a subdirectory of itself, ‘~/MYDIR/DESTINATIONDIR/DESTINATIONDIR’
Mas isso vai mudar [quase] todo o resto. Então funciona, mas é uma bagunça. Se você precisar corresponder arquivos ocultos, execute shopt -s dotglob
antes e isso funcionará.
Movendo uma lista de arquivos manualmente
Dada a pequena lista de coisas, podemos facilmente listá-las com uma pequena expansão bash:
mv ~/MYDIR/{DIR{1,2},file{1,2}} ~/MYDIR/DESTINATIONDIR
Se você precisar de arquivos ocultos com esse método, inclua-os na lista.
Se esta lista vier de outra coisa (por exemplo, find
), pode ser difícil garantir que o destino seja o último argumento. Você pode mover o destino para a frente com o argumento -t
. Este é um exemplo horrível, mas destaca quando você precisa:
find ~/MYDIR/ -maxdepth 1 ! -name DESTINATIONDIR -exec mv -t ~/MYDIR/DESTINATIONDIR {} +
Pulverização inversa com shopt
, elegância definida.
Então, vamos encontrar o equilíbrio entre a listagem manual e os curingas. Ativando os recursos de globbing estendido no Bash, podemos selecionar [quase] tudo mas o diretório de destino.
shopt -s extglob
mv ~/MYDIR/!(DESTINATIONDIR) ~/MYDIR/DESTINATIONDIR
Se você precisar corresponder arquivos ocultos, execute shopt -s dotglob
antes e isso funcionará.