Troque (troque) dois arquivos grandes em ambiente limitado

Troque (troque) dois arquivos grandes em ambiente limitado

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 aestiver no dispositivo Ae bestiver no dispositivo B, quero que a operação de troca seja colocada aon Be bon 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.

informação relacionada