A maneira mais simples seria obter um cabo cross-over e conectar as duas máquinas. :) Mas se você absolutamente deve fazê-lo com uma memória flash e fita adesiva, você pode fazer assim:
Na máquina destino :
-
find /some/dir -type f -print0 | xargs -0 sha1sum -b | sort >dst.txt - copie o arquivo
dst.txtpara a máquina source
Na máquina source :
-
find /some/dir -type f -print0 | xargs -0 sha1sum -b | sort >src.txt -
comm -23 src.txt dst.txt | cut -b 43- | (cd /some/dir; tar cJvf - --files-from -) | split -b 3500MB -d - copie os arquivos
x*, um por um, para a máquina destino -
rm -f x* src.txt dst.txt
Na máquina destino novamente:
-
cat $( ls -1 x* | sort ) | (cd /some/dir; tar xJvpf -) -
rm -f x*
Como isso deve funcionar:
- os arquivos
dst.txtesrc.txtcontêm somas SHA-1 dos arquivos nas duas máquinas -
comm -23 src.txt dst.txtseleciona os arquivos que existem apenas na máquina source ou existem em ambos, mas são diferentes -
cut -b 43-mantém apenas os nomes dos arquivos; esta é a lista de arquivos que precisam ser copiados -
cd /some/diralteraCWDpara o diretório de origem -
tar cJvpf - --files-from -faz um arquivo do grupo;--files-from -lê a lista de arquivos a serem arquivados destdin,f -diztarpara gravar o arquivo emstdout,Jsignifica compactar o arquivo comxzevfaztarimprime a lista de arquivos que arquiva emstderr -
split -b 3500MB -ddivide o arquivo em pedaços de 3500MB (suponho que você tenha uma memória flash de 4GB e os dados não caibam todos em uma única execução; talvez você não precise fazer isso) -
cat $( ls -1 x* | sort )concatena os arquivosx*;sortestá lá para garantir que isso seja feito na ordem certa -
cd /some/diralteraCWDpara o diretório de destino -
tar xJvpf -salva os arquivos;Jsignifica descompactar comxz,psignifica restaurar permissões,vtorna a operação detalhada ef -diztarpara ler o arquivo destdin.
Por fim, a declaração de responsabilidade do @Stéphane Chazelas: assume que (1) os nomes de arquivos em cada máquina não contêm novas linhas e (2) os diretórios a serem espelhados não são muito profundos (há um limite para o comprimento máximo de arquivos em tar arquivos, e não é muito alto - 200 caracteres IIRC).