Estou usando o rsync para copiar arquivos há algum tempo. Meu entendimento é que o rsync é mais rápido que o cp quando alguns dos arquivos a serem transferidos já estão no diretório de destino, transferindo apenas a diferença incremental (ou seja, os "deltas").
Se isso estiver correto, haveria alguma vantagem em usar o rsync para mover o conteúdo de uma pasta A , para dizer uma pasta B , com B vazio?
A pasta A possui quase 1 TB de dados (e milhões de arquivos). A transferência seria feita em uma rede local ( A e B estão em sistemas de arquivos diferentes , ambos montados em um supercomputador, por exemplo, A é NFS e B é brilho ).
Além disso, quais sinalizadores devo usar para solicitar ao rsync para mover (não copiar) arquivos de A para B (ou seja, para excluir A quando a transferência for concluída com êxito)?
rsync
pode substituirmv
. Eu esperariamv
ser mais rápido na maioria dos tipos de sistemas de arquivos quando a origem e o destino estiverem dentro do mesmo sistema de arquivos, porquersync
precisariam fazer uma cópia, não importando o quemv
fosse , e provavelmente conseguiriam mudar algumas entradas de diretório. A coisa mais próxima que posso encontrar de umrsync mv
é o--remove-source-files
comando, mas isso não remove os diretórios.mv
mais rápido?mv
não pode operar em uma rede - teria que depender de uma montagem local (por exemplo, NFS). Se o gargalo for a rede,rsync
provavelmente seria mais rápido do quemv
porquersync
pode fazer a compactação.cp
tem-u
opção de copiar arquivo de origem se for mais recente que o arquivo de destino ou quando o arquivo de destino está faltandoRespostas:
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. Uma planície
mv
fará o trabalho o mais rápido possível.No seu caso, o que pode fazer diferença no desempenho é a escolha do protocolo de rede, se você tiver escolha entre NFS, Samba, sshfs, sftp, rsync sobre ssh, tar canalizado para ssh etc. A velocidade relativa desses métodos depende sobre o tamanho dos arquivos, a largura de banda da rede e do disco e outros fatores; portanto, não há como dar conselhos gerais; você precisará executar seus próprios benchmarks.
fonte
--remove-source-files
único exclui os arquivos na fonte. se você deseja limpar nossa fonte, você não precisaria executar um rm -rf (oufind
todos os diretórios e passar-delete
) na fonte depois que o rsync for executado com êxito?--checksum
para solicitar a verificação dos resultados da primeira sincronização.Como
--remove-source-files
não remove os diretórios, emito os seguintes comandos para mover arquivos pelo ssh:Pessoalmente, gosto do
--progress
recurso, pois faço essa transferência manualmente. Remova-o se você estiver usando um script. Espero que diminua as transferências marginalmente. Afind
opção de exclusão do comando exclui apenas diretórios vazios - não userm -rf
, pois pode excluir diretórios não vazios no caso de um arquivo não ter sido transferido. A-delete
opção ativa a-depth
opção para que as árvores de diretórios vazias sejam excluídas da "parte inferior" para cima.fonte
-delete
é muito mais agradável do que-exec rmdir {} +
etcDe maneira geral, como Gilles disse, não há vantagem em usar
rsync
arquivos para mover quandomv
o trabalho será mais simples e não há ganho de velocidade em potencial entre sistemas de arquivos comuns.No entanto, existem momentos em que há uma vantagem. Em particular, se você tiver alguma dúvida sobre a estabilidade da fonte, do destino ou da máquina que está fazendo o trabalho, a utilização
rsync
permitirá retomar a capacidade. Isso pode ser uma vantagem notável se a transferência for muito grande e, por exemplo, 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.fonte
mv
só é melhor se o destino e a origem estiverem na mesma partição, de modo quemv
apenas edite os metadados do arquivo em vez de fazer uma cópia.rsync
vez de mv, é quando quero preservar a estrutura da pasta (se você usar--relative
).Eu me encontrei em uma situação em que 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 foi executada por 20 dias e o comando mv sai com falha porque não pode alocar recursos.
No entanto, o rsync parece lidar com todos os arquivos sem problemas.
fonte
Se você deseja mesclar diretórios recursivamente ... mova um diretório para outro com nomes potencialmente duplicados , veja minha resposta aqui em serverfault.com.
mv
faz um trabalho ruim quando os diretórios existem com o mesmo nome ersync
copia (ler + gravar dados completos) todos os arquivos, em vez de apenas movê-los (somente leitura e gravação de metadados).fonte
Não há como realmente mover arquivos usando o rsync, como faria o comando Linux mv. Ao usar --remove-source-files, você está essencialmente copiando arquivos para o destino e excluindo arquivos (exceto diretórios) da fonte. Isso pode atingir seu objetivo de mover arquivos, mas você NÃO economizará tempo ou operação de E / S.
fonte