O Rsync copia arquivos. É o que isso faz. Mesmo se você disser para remover os arquivos de origem, ele ainda os copia primeiro, nunca os move, mesmo quando o destino estiver no mesmo sistema de arquivos.
O utilitário mv
do GNU coreutils tem uma opção -u
para mover arquivos somente se o destino for mais antigo que a origem ou ainda não existir. Isso é semelhante ao -u
do rsync.
Se você quiser mover uma árvore de diretórios para uma existente, você pode usar uma travessia recursiva que chame mv
em cada arquivo. Se você não quiser substituir arquivos existentes:
cd d1
find . -depth -exec sh -c 'test -e "../d2/$0" || mv "$0" "../d2/$0"' {} \;
Se você quiser substituir os arquivos existentes, precisará distinguir entre os diretórios existentes e outros arquivos e decidir o que fazer quando a origem tiver um arquivo regular em que o destino tenha um diretório.