将文件从驱动器A移动到驱动器B的最安全,最可靠的方法


3

我试图找到最安全的方法在两个驱动器之间移动数据,旨在处理最糟糕的情况。例如:如果您试图移动您孩子出生的图片的唯一现有副本,而疯狂的猴子在大厅漫游,可能随时拉动您的Mac和/或外部驱动器上的电源线。

请注意,有一个类似的同步问题,但我特别要求移动哪个是另一个问题,因为(除其他原因外)你必须能够分辨哪些文件已被移动,哪些文件没有被移动。您还需要考虑某些文件可能已复制到预期目标但未从源中删除的可能性。

该解决方案不必使用GUI。事实上,我发现终端安慰。我不介意安装新程序(特别是如果可用的话brew)。唯一要求是该解决方案与Mac OS X 10.8兼容。

以下是我想到的工作流程解决方案:

  1. cp (复制)文件(如果需要)
  2. 校验和文件(复制后或者如果找到文件的现有副本)
  3. 将文件rm移动到新位置后,将原始文件移动到废纸篓(不是!)

进一步来说:

  1. 用户指定文件应移动到的位置(目标/目标文件夹)。称之为$DEST(这与--target-directoryGNU 的标志类似mv

  2. 用户指定应移动到的文件/文件夹$DEST。打电话给那$INPUT

  3. 然后脚本将寻求从每个文件/文件夹$INPUT$DEST

  4. 如果找到文件/文件夹,$DEST则将校验和$INPUT复制。

  5. 如果校验和匹配,请将$INPUT副本移至废纸篓。

  6. 如果校验和不匹配,请替换$DESTcopy$INPUT

注意:虽然我关心权限(技术上我关心“可执行性”),但我并不关心“所有权”,因为我是本地系统的唯一用户。

在我去重新发明轮子之前,这样的事情是否已经存在?

基本上我希望尽可能保证在删除原始文件之前已经制作好的副本,而不是在两个驱动器之间进行完全同步。

Answers:


5

我使用与同步相同的解决方案,并为rsync提供了删除源文件的选项。像这样的东西:

rsync -azv --remove-source-files $INPUT $DEST

如你所说,为什么重新发明轮子?rsync校验和每个传输的文件,以确保它已正确传输。


其中一个StackExchange站点上的某个人表示rsync在执行本地副本时不进行校验和。我现在找不到引文,但我在过去一周左右才看到它。他们在谈论Linux,并使用了一些工具来检查I / O,并没有看到任何证据表明它正在检查本地副本。有没有办法确认它有没有?
TJ Luoma

这里是一个人说他们看了代码并且检查过的地方,而其他人说他检查过,但没有。unix.stackexchange.com/questions/30970 / ...
TJ Luoma
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.