Mover todos os arquivos e diretórios para o diretório de destino

1

Eu tenho estrutura de diretórios:

~/MYDIR/
  /DESTINATIONDIR/
  /DIR1/
  /DIR2/
  /file1
  /file2

Eu preciso mover DIR1, DIR2,file1,file2 para DESTINATIONDIR

Qual é a maneira mais elegante e ideal de fazer isso a partir do terminal?

UPD: asume que temos muito mais arquivos e dirs com nomes diferentes

    
por vico 14.01.2016 / 15:48

2 respostas

7

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á.

    
por Oli 14.01.2016 / 15:58
0

e:

cd ~/MYDIR
mv DIR* file* DESTINATIONDIR
    
por incBrain 14.01.2016 / 15:54