Quais são os comandos equivalentes ao rsync para mv / a / b / c / d?

2

Quais são os rsynccomandos / s equivalentes para mv/ a / b / / c / d /, ou seja, mover uma árvore de diretórios de um local para outro, possivelmente em outro sistema de arquivos?

Ou seja, não apenas copiar, mas excluir os arquivos do local original. O motivo pelo qual desejo usar rsyncé que desejo retomar uma movimentação parcial e limitar o uso da largura de banda.

tomsv
fonte

Respostas:

2

Este comando irá sincronizar todos os arquivos de / a / b para / c / d, e irá preservar permissões, datas de modificação, links simbólicos, e irá recursar para diretórios, ('-a', ou '--archive' faz tudo isso, é o mesmo que usar '-rlptgoD', que são opções separadas para tudo isso), -v é para verbose e '--remove-source-files' excluirá os arquivos de origem depois que eles forem totalmente criados no destino.

Se o diretório d dentro de / c / não existir, ele será criado.

rsync -av --remove-source-files /a/b /c/d

Se você deseja mover para o servidor remoto, então isso irá sincronizar com o caminho do servidor remoto, '-z' irá compactar os dados do arquivo durante a transferência.

rsync -avz --remove-source-files /a/b user@hostname_or_ip:/c/d

Diretórios não serão removidos por '--remove-source-files', então você precisa rodar o rm -rf / a / b após o rsync para remover todos os diretórios dentro de / a / b /

Em um comando de linha você pode colocar tudo assim

rsync -av --remove-source-files /a/b /c/d; if find /a/b/ -type f | read; then echo "Not all files were synced"; else rm -rf /a/b; fi

Isso executará o rsync e, em seguida, verificará se ainda existem arquivos, para evitar a exclusão da pasta se alguns arquivos não tiverem sido totalmente sincronizados e, portanto, não tiverem sido excluídos e depois imprimir que nem todos os arquivos foram sincronizados ou excluir a pasta não há arquivos nele.

rAlen
fonte
1
A página man do rsync lê "--remove-source-files sender remove arquivos sincronizados (não-dir)". Isso significa que eu tenho que remover o diretório de origem usando "rm -r / a / b" depois para torná-lo equivalente a mv?
tomsv
sim, diretórios não serão removidos, então você precisa rodar o rm -rf / a / b após o rsync para remover todos os diretórios dentro de / a / b /, adicionado à resposta
rAlen
Adicionou um comando de linha, com verifique se todos os arquivos foram sincronizados / apagados antes de remover dir
rAlen