%20dois%20arquivos%20grandes%20em%20ambiente%20limitado.png)
Digamos que eu tenha dois dispositivos de memória flash com capacidade de 1 GB cada. Digamos também que cada dispositivo contém um arquivo grande com aproximadamente 1 GB de tamanho. Supondo que eu tenha RAM limitada (64 MB) e nenhuma unidade de disco rígido,qual é o caminho mais curto para trocar esses dois arquivos?
Quero dizer: se o arquivo a
estiver no dispositivo A
e b
estiver no dispositivo B
, quero que a operação de troca seja colocada a
on B
e b
on A
.
Eu sei que não existe uma ferramenta Linux exata para fazer isso de acordo comesta discussão.
Estou interessado no caminho mais curto para atingir meu objetivo. Se esse caminho for muito longo, provavelmente terei que implementar minha própria solução dedicada que realizará a troca pedaço por pedaço, certo?
Responder1
Contanto que ambas as unidades estejam cheias ou quase cheias, duvido que haja uma solução bonita. Deve ser possível fazer um loop nos comandos dd. Algo como
#This code is completely untested,
#do NOT just copy paste and use it without proper testing
while [[ $((i*chunkSize)) -lt fileSize ]]; do
dd skip=$i seek=$i bs=$chunkSize count=1 if=fileA of=tmpFileInMemory
dd skip=$i seek=$i bs=$chunkSize count=1 if=fileB of=FileA
dd skip=$i seek=$i bs=$chunkSize count=1 if=tmpFileInMemory of=fileB
done
Algumas verificações são necessárias quando o arquivoA e o arquivoB têm tamanhos diferentes.