Não com mv
.
A função principal de mv
(apesar de seu nome) é renomear um objeto. Uma das garantias que o UNIX faz é que as renomeações são atômicas - você nunca tem permissão para ver uma renomeação parcialmente concluída. Esta garantia pode ser muito útil se você quiser alterar um arquivo ( /etc/passwd
, por exemplo) que outros programas possam estar olhando, e você quer que eles vejam a versão antiga ou nova do arquivo, e não outra possibilidade . Mas uma "renomeação recursiva" como você descreve quebraria essa garantia - você poderia parar no meio e você teria uma árvore meio movida e provavelmente uma bagunça - e assim ela não se encaixa na filosofia de mv
. Esse é o meu palpite a respeito de porque mv -r
não existe.
(Não importa que mv
quebra essa filosofia de outras formas menores. Por exemplo, mv
na verdade faz um cp
seguido por rm
ao mover arquivos de um sistema de arquivos para outro.)
Bastante filosofia. Se você quiser recursivamente mover ("arrastar e soltar") uma árvore de um lugar para outro no mesmo sistema de arquivos , você pode obter a eficiência e a velocidade de mv
da seguinte forma (por exemplo):
cp -al source/* dest/ && rm -r source/*
O sinal -l
to cp
significa "criar um link físico em vez de copiar" - está efetivamente criando um novo nome de arquivo que aponta para os mesmos dados de arquivo que o nome do arquivo antigo. Isso só funciona em sistemas de arquivos que suportam links físicos, portanto, qualquer sistema de arquivos UNIX-ish nativo é bom, mas não funciona com o FAT.
O &&
significa "apenas execute o seguinte comando se o comando precedente for bem-sucedido". Se você quiser, pode executar os dois comandos, um de cada vez.