Como apagar diretórios de fonte vazia ao mover pastas com o rsync?

7

rsync pode ser persuadido a mover pastas de maneira muito semelhante e superior ao 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 diretórios originais. O --remove-source-files flag faz exatamente isso, remove os arquivos de origem, mas não também os diretórios de origem. Eu gostaria que houvesse uma bandeira --remove-source-directories também, mas não há.

Como posso lidar com isso? Suponho que posso apenas emitir um rm -fr após a mudança, mas prefiro manter o procedimento em um único processo vs apresentar um potencial para erros .

    
por ylluminate 28.04.2012 / 20:12

3 respostas

3

Eu não encontrei um comando que faça isso de uma só vez, mas como o rsync ainda funciona melhor que rm -rf (especialmente se você tiver um número muito grande de diretórios) aqui estão dois comandos rsync que fazem um "mover" :

rsync -av --ignore-existing --remove-source-files source/ destination/ && \
rsync -av --delete 'mktemp -d'/ source/ && rmdir source/
    
por 08.06.2013 / 00:20
5

Usar " rm -rf " possui uma condição de corrida inerente, você pode excluir arquivos que acabaram de ser criados entre o rsync e o rm invocações.

Eu prefiro usar:

rsync --remove-source-files -a server:incoming/ incoming/ &&

ssh server find incoming -type d -delete

Isto NÃO removerá os diretórios se eles não estiverem vazios.

    
por 24.03.2015 / 17:36
2

Por que não adicionar apenas rm -rf source_directory após o seu rsync?

rsync -axvvES --remove-source-files source_directory /destination/ && rm -rf source_directory

Cada programa de linha de comando é (idealmente) feito para executar uma tarefa específica, e cabe a você juntar vários para realizar tarefas mais complexas.

    
por 29.04.2012 / 03:33