Como movo todos os diretórios para um único diretório com eficiência na mesma pasta?

Como movo todos os diretórios para um único diretório com eficiência na mesma pasta?

Tenho 100 arquivos em uma única pasta, incluindo uma pasta chamada "destino". Quero migrar todos os arquivos desta pasta para a pasta de destino (exceto a própria pasta de destino).

Existe um comando de terminal eficiente para fazer isso?

Responder1

Se houver apenas os arquivos (e o destino do diretório) em seu diretório, simplesmente use mvem vez de find:

mv * target

Ele irá reclamar que o 'alvo' não pode ser movido sozinho, mas todos os arquivos estarão no alvo posteriormente.

Responder2

Usa isto

$ mv target ..
$ mv * ../target
$ mv ../target .

Responder3

Isso também funciona:

find . -maxdepth 1 ! -name target ! -name . -exec mv "{}" target \;

Uma das principais vantagens de findconfiar na conclusão do bash é que você obtém os arquivos ocultos ao mesmo tempo. mv * ...não farei isso.

Você talvez pudesse escolher algo como:

mv -t target * .[^.]*

Ou, como James aponta, você pode reduzir o comando find para ver apenas os arquivos... E como LoremIpsum apontou, se houver bilhões deles, usar xargsseria um pouco mais eficiente:

find . -maxdepth 1 -type f -print0 | xargs -0 mv -t target

Responder4

A abordagem de mover o diretório de destino para um anterior, em seguida, mover tudo para ele e, finalmente, movê-lo de volta para o diretório atual, se estiver correto. O único problema é que não funciona para um diretório de projeto git onde precisamos manter o histórico.

Então, para um diretório git, basta mover assim:git mv * alvo -k

O-kopção é usada para pular erros de movimentação/renomeação

informação relacionada