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.txt
para 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.txt
esrc.txt
contêm somas SHA-1 dos arquivos nas duas máquinas -
comm -23 src.txt dst.txt
seleciona 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/dir
alteraCWD
para 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 -
diztar
para gravar o arquivo emstdout
,J
significa compactar o arquivo comxz
ev
faztar
imprime a lista de arquivos que arquiva emstderr
-
split -b 3500MB -d
divide 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*
;sort
está lá para garantir que isso seja feito na ordem certa -
cd /some/dir
alteraCWD
para o diretório de destino -
tar xJvpf -
salva os arquivos;J
significa descompactar comxz
,p
significa restaurar permissões,v
torna a operação detalhada ef -
diztar
para 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).