![在有限环境下交换(交换)两个大文件](https://linux22.com/image/52054/%E5%9C%A8%E6%9C%89%E9%99%90%E7%8E%AF%E5%A2%83%E4%B8%8B%E4%BA%A4%E6%8D%A2%EF%BC%88%E4%BA%A4%E6%8D%A2%EF%BC%89%E4%B8%A4%E4%B8%AA%E5%A4%A7%E6%96%87%E4%BB%B6.png)
假设我有两个闪存设备,每个容量为 1GB。假设每个设备都包含一个大文件 ~ 1GB 大小。假设我的 RAM 有限(64MB)并且没有硬盘驱动器,交换这两个文件的最短方法是什么?
我的意思是:如果文件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
当 fileA 和 fileB 具有不同大小时,需要进行一些检查。