我有两个大小相同、几乎已满的外部硬盘。
我想将所有内容从一个驱动器传输到另一个驱动器,反之亦然。
有没有办法可以自动完成此操作,而不必手动连续地在两个驱动器之间传输文件,直到所有内容都切换完毕?
即,是否存在一个程序或命令,可以让它自行运行,直到驱动器 1 包含驱动器 2 的所有内容,并且驱动器 2 包含驱动器 1 的所有内容?
我可以访问 Windows 和 Linux,但不能访问中介来临时存储一个驱动器的数据。
答案1
由于这是一个重复的问题, 这来自 bytebuster 的小脚本可能会有帮助。它只是在驱动器 X: 和 Y: 之间来回移动文件到 Y:\fromX 和 X:\fromY,直到当前目标驱动器上的可用空间用尽,然后切换源/目标,直到除了 Y:\fromX 和 X:\fromY 之外没有其他目录。
当然,只有当驱动器中没有一个文件大于两个驱动器的可用空间总和时,它才会起作用,即使这样也可能无法工作(由于文件顺序和它是一个非常简单的脚本)。为了安全工作,它需要每个驱动器的可用空间大于正在传输的最大文件。
它非常简单,如果您更喜欢 Linux,您可以轻松地使用 bash/rsync 而rsync --remove-source-files --exclude=dir
不是重写它robocopy /MOVE /XD dir
。
答案2
我用齐奏进行这种同步。它建立在协议之上rsync
。除其他用途外,我还使我的文档目录在 Windows 和 Linux 之间保持同步。更改冲突需要手动处理,但删除可以智能处理。
第一次运行将需要一段时间,之后只需要处理更改。
编辑:我误读了你原来的要求。在我看来,这是一个奇怪的要求,除非出于某种原因,你想将文件移植到更大的驱动器上,而不想将文件移植到其他驱动器上。没有中间空间也很奇怪。
如果任一磁盘上的文件都是可压缩的,那么可以创建一个驱动器的压缩存档(zip、tar 等)到您的系统,在驱动器之间移动文件,然后将原始存档还原到另一个驱动器。或者,使用 gzip 压缩两个磁盘上的文件。来回移动文件,然后解压。
如果您想要将文件移动到 A,将文件移动到 B,将文件移动到 A... 那么rsync
仅使用 find 规则就可以满足您的需要。 需要围绕它编写一个小的 shell 脚本来在每次传递时切换方向。 两个系统上的目录需要不同。 您可能需要重新排列/重命名目录以进行移动。