Intercambie (intercambie) dos archivos grandes en un entorno limitado

Intercambie (intercambie) dos archivos grandes en un entorno limitado

Digamos que tengo dos dispositivos de memoria flash de 1 GB de capacidad cada uno. Digamos también que cada dispositivo contiene un archivo grande de ~ 1 GB de tamaño. Suponiendo que tengo RAM limitada (64 MB) y no tengo unidad de disco duro,¿Cuál es la forma más corta de intercambiar estos dos archivos?

Quiero decir: si el archivo aestá en el dispositivo Ay bestá en el dispositivo B, quiero que la operación de intercambio se realice auna By botra vez A.

Sé que no existe una herramienta de Linux exacta para hacer eso segúnesta discusión.

Estoy interesado en el camino más corto para lograr mi objetivo. Si ese camino será demasiado largo, probablemente tendré que implementar mi propia solución dedicada que realizará el intercambio fragmento por fragmento, ¿verdad?

Respuesta1

Mientras ambas unidades estén llenas, o casi llenas, dudo que haya una buena solución. Sin embargo, debería ser posible recorrer los 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

Se necesitan algunas comprobaciones cuando el archivo A y el archivo B tienen tamaños diferentes.

información relacionada