Usando o rsync para mover (não copiar) arquivos entre diretórios?

47

Eu tenho usado o rsync para copiar arquivos por algum tempo. Meu entendimento é que rsync é mais rápido que cp quando alguns dos arquivos a transferir já estão no diretório de destino, transferindo apenas a diferença incremental (isto é, os "deltas").

Se isso estiver correto, haveria alguma vantagem em usar rsync para mover o conteúdo de uma pasta A , para dizer, uma pasta B , com B estando vazio?

A pasta A tem perto de 1 TB de dados (e milhões de arquivos). A transferência seria feita através de uma rede local ( A e B estando em diferentes sistemas de arquivos, ambos montado em um supercomputador, por exemplo A é NFS e B é brilho ).

Além disso, que sinalizadores devo usar para solicitar que o rsync mova (não copie) arquivos de A para B (ou seja, delete A quando a transferência foi concluída com sucesso)?

    
por Amelio Vazquez-Reina 25.07.2012 / 19:16

6 respostas

56

Você pode passar --remove-source-files para o rsync para mover arquivos em vez de copiá-los.

Mas no seu caso, não faz sentido usar o rsync, pois o destino está vazio. Um mv simples fará o trabalho o mais rápido possível.

No seu caso, o que poderia fazer diferença no desempenho é a escolha do protocolo de rede, se você tiver uma escolha entre NFS, samba, sshfs, sftp, rsync sobre ssh, tar canalizado em ssh, etc. esses métodos dependem do tamanho dos arquivos, da largura de banda da rede e do disco e de outros fatores. Por isso, não há como dar conselhos gerais. Você precisará executar seus próprios testes de desempenho.

    
por 26.07.2012 / 02:02
14

Em geral, como Gilles disse , não há vantagem em usar rsync para mover arquivos quando mv fará com que o mesmo trabalho seja feito de maneira mais simples e não haverá ganho de velocidade potencial entre os sistemas de arquivos comuns.

No entanto, existem algumas ocasiões em que há uma vantagem. Em particular, se você tiver alguma dúvida sobre a estabilidade da origem, do destino ou da máquina que está realizando o trabalho, use rsync para retomar a habilidade. Isso pode ser uma vantagem notável se a transferência for muito grande e, digamos, sua rede elétrica não for confiável. Usar o rsync será uma maneira mais estável de evitar a corrupção de dados no caso de uma falha e continuar de onde você parou.

    
por 15.02.2014 / 22:39
12

would there be any advantage to using rsync to moving the contents of a folder A, to say, a folder B, with B being empty?

Eu encontrei-me em uma situação onde o rsync é mais rápido que o mv simplesmente porque o mv não pode lidar com o número de arquivos no diretório. Tenho 1,8 milhão de fotos de uma câmera de segurança que funcionou por 20 dias e o comando mv sai com uma falha porque não pode alocar recursos.

O rsync, no entanto, parece lidar com todos os arquivos sem nenhum problema.

    
por 26.10.2014 / 02:44
12

Como --remove-source-files não remove os diretórios, emita os seguintes comandos para os arquivos mover sobre ssh:

rsync -avh --progress --remove-source-files /home/user/mystuff/* [email protected]:/home/user/backup
find . -type d -empty -delete

Pessoalmente, gosto do recurso --progress , pois faço essa transferência manualmente. Remova-o se você estiver usando um script. Espero que isso atrase as transferências marginalmente. A opção de exclusão do comando find exclui somente os diretórios vazios - não use rm -rf , já que ele pode excluir diretórios não vazios no caso de um arquivo não ser transferido. A opção -delete ativa a opção -depth para que as árvores de diretórios vazias sejam excluídas do "bottom" para cima.

    
por 16.06.2016 / 23:22
1

Se você quiser mesclar recursivamente diretórios ... mover um diretório para outro diretório com nomes de diretórios duplicados , por favor, veja minha resposta aqui em serverfault.com. mv faz um mau trabalho quando existem diretórios com o mesmo nome e rsync copia (lê + grava dados completos) todos os arquivos em vez de apenas movê-los (ler e gravar somente metadados).

    
por 10.11.2017 / 13:41
0

Não há como mover os arquivos usando o rsync, como faria o comando mv do Linux. Usando --remove-source-files, você está essencialmente copiando arquivos para o destino e, em seguida, excluindo arquivos (exceto diretórios) da origem. Isso pode atingir o objetivo de mover arquivos, mas você NÃO economizará tempo ou operação de I / O.

    
por 06.12.2018 / 07:00

Tags