rsync
pode ser convencido a mover pastas de maneira muito semelhante e superior à tradicional, mv
com as seguintes opções:
rsync -axvvES --remove-source-files source_directory /destination/
No entanto, uma coisa que ainda não consigo fazer é remover os diretórios originais. A --remove-source-files
bandeira faz exatamente isso, remove os arquivos de origem, mas não também diretórios de origem. Eu gostaria que houvesse uma --remove-source-directories
bandeira também, mas não há.
Como posso lidar com isso? Suponho que posso apenas emitir um rm -fr
após a mudança, no entanto, eu preferiria manter o procedimento todo em um processo versus introduzir um potencial de erros.
mv
?find . -type d -empty | xargs rmdir -p
rsync
sessão para uma lista que é então processada após o processo que a limpa ... Hummm.Respostas:
Eu não encontrei um comando que faça isso de uma só vez, mas como o rsync ainda tem um desempenho melhor do que
rm -rf
(especialmente se você tiver um número muito grande de diretórios), aqui estão dois comandos do rsync que fazem um "movimento" :fonte
O uso de " rm -rf " tem uma condição de corrida inerente, você pode excluir os arquivos que foram criados entre as invocações rsync e rm .
Eu prefiro usar:
Isso NÃO removerá os diretórios se eles não estiverem vazios.
fonte
-depth
OSX ou outros.Acabei em uma situação semelhante. Eu queria evitar
rm -rf
, sabendo que o rsync falhou ao copiar alguns arquivos e não queria perdê-los.Para simplesmente excluir os diretórios vazios, achei este o mais conveniente (de
sourcedir
):fonte
Por que não adicionar apenas
rm -rf source_directory
após o seu rsync?Cada programa de linha de comando é feito (idealmente) para executar uma tarefa especificada, e cabe a você colar vários para realizar tarefas mais complexas.
fonte
find -depth
. Você tem alguma sugestão sobre uma abordagem algorítmica rápida para chegar ao fundo da pilha de diretórios, movendo-se com rsync, movendo-se como você observa e depois voltando para a árvore?