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 mv
em 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 find
confiar 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 xargs
seria 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