Обмен (поменять местами) два больших файла в ограниченной среде

Обмен (поменять местами) два больших файла в ограниченной среде

Допустим, у меня есть два устройства флэш-памяти емкостью 1 ГБ каждое. Допустим, что каждое устройство содержит один большой файл размером ~ 1 ГБ. Предположим, что у меня ограниченный объем оперативной памяти (64 МБ) и нет жесткого диска,каков кратчайший способ поменять местами эти два файла?

Я имею в виду: если файл aнаходится на устройстве Aи bнаходится на устройстве B, я хочу, чтобы операция подкачки была помещена aна Bи bна A.

Я знаю, что нет точного инструмента для Linux, который бы это сделал.это обсуждение.

Мне интересен кратчайший путь к достижению моей цели. Если этот путь будет слишком длинным, мне, вероятно, придется реализовать свое собственное специализированное решение, которое будет выполнять подкачку по частям, я прав?

решение1

Пока оба диска заполнены или почти заполнены, я сомневаюсь, что есть красивое решение. Хотя, должно быть, можно зациклить команды dd. Что-то вроде

#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

Некоторые проверки необходимы в случае, когда файлы A и B имеют разные размеры.

Связанный контент