16

我有很多来自一侧的文件(A)和其他地方的很多其他文件(B)

我正在将A复制到B,有很多文件是相同的,但内容可能不同!

通常我使用 mc (Midnight Commander) 来执行此操作,并选择“如果不同大小则覆盖”。但也有大小相同,内容不同的情况。在这种情况下, mc 将文件保存在 B 位置而不覆盖它。

在 mc 覆盖对话框中有一个工作“更新”我不知道它在做什么?在帮助中没有这样的信息,也许这是一个解决方案?

因此,我正在寻找可以帮助我将所有文件从 A 复制到 B 并覆盖 B 位置的文件(如果它们存在并且内容与 A 不同)的解决方案。

如果“B”位置的文件存在(相同名称)并且内容不同,则每次都必须被“A”位置的文件覆盖。

你知道有什么解决办法吗?

4

4 回答 4

20

我会使用rsync它,因为这不会依赖于文件日期,而是实际检查文件的内容是否已更改。例如:

#> rsync -cr <directory to copy FROM> <directory to copy TO>

Rsync 将文件复制到远程主机或从远程主机复制文件,或者在当前主机本地复制文件(它不支持在两个远程主机之间复制文件)。

-c, --checksum    skip based on checksum, not mod-time & size
-r, --recursive   recurse into directories

有关man rsync更多选项和详细信息,请参阅。

于 2016-05-29T14:48:28.603 回答
18

您是否尝试过命令行:

cp -ru A/* B/

应该递归地将所有更改的文件(更新的时间戳)从目录 A 复制到目录 B。

您也可以在命令行中使用-a而不是-r,具体取决于您要执行的操作。请参阅cp手册页。

于 2011-10-27T10:31:01.043 回答
0

您可能希望保留某种“索引”文件,其中包含文件的 SHA-1 哈希值,您在编写文件时会创建这些文件。然后,您可以计算“源”哈希并将其与索引文件中的“目标”哈希进行比较。这仅在此过程是文件写入目标的唯一方式时才有效。

于 2011-10-27T10:32:15.073 回答
0

http://linux.math.tifr.res.in/manuals/man/mc.html

当您尝试在现有文件的顶部复制或移动文件时,会显示替换对话框。该对话框显示两个文件的日期和大小。按 Yes 按钮覆盖文件,按 No 按钮跳过文件,按 allL 按钮覆盖所有文件,按 nonE 按钮从不覆盖,如果源文件比目标文件新,按 Update 按钮覆盖。您可以通过按 Abort 按钮中止整个操作

于 2018-04-28T10:53:43.833 回答