Linux 如果要复制的文件的内容不相同,则在复制时覆盖文件

Linux 如果要复制的文件的内容不相同,则在复制时覆盖文件,linux,deployment,console,copying,mc,Linux,Deployment,Console,Copying,Mc,我有一方的很多文件(a),另一方的很多其他文件(B) 我将A复制到B,有很多文件是相同的,但内容可能不同 通常我使用mc(Midnight Commander)来完成,并选择“如果大小不同,则覆盖”。 但有一种情况是大小相同,但内容不同。在这种情况下,mc将文件保留在B位置,而不会覆盖它 在mc覆盖对话框中有一个工作“更新”,我不知道它在做什么?在帮助中没有这样的信息,也许这是一个解决方案 所以,我正在寻找一个解决方案,它可以帮助我将所有文件从A复制到B,并覆盖B位置的文件(如果它们存在并且内容

我有一方的很多文件(a),另一方的很多其他文件(B)

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

通常我使用mc(Midnight Commander)来完成,并选择“如果大小不同,则覆盖”。 但有一种情况是大小相同,但内容不同。在这种情况下,mc将文件保留在B位置,而不会覆盖它

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

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

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


您知道任何解决方案吗?

您是否尝试过命令行:

cp -ru A/* B/
应将所有更改的文件(最近的时间戳)从目录A递归复制到目录B


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

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

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

#> rsync -cr <directory to copy FROM> <directory to copy TO>
有关更多选项和详细信息,请参阅。


尝试复制或移动现有文件顶部的文件时,将显示“替换”对话框。该对话框显示两个文件的日期和大小。按“是”按钮覆盖文件,按“否”按钮跳过文件,按“全部”按钮覆盖所有文件,按“无”按钮从不覆盖,如果源文件比目标文件新,按“更新”按钮覆盖。您可以通过按abort(中止)按钮中止整个操作,顺便说一句,所有文件都是纯文本文件。这似乎是我需要的-u表示仅当源文件比目标文件新或目标文件丢失时才复制,但它查找的时间戳是什么?记录时间?事实上,这不是一个理想的解决方案,但现在可能最简单,谢谢。你知道有什么软件可以做类似的事情吗?1.为源文件树生成哈希。2.为目标文件树生成哈希。3.比较并仅复制已更改的文件。是吗?不是很快,不是,但是使用openssl库编写自己的代码听起来很有趣:)这里的关键是
-c
开关。我希望避免“修改的”时间戳更改和比较文件内容,而不仅仅是时间戳。谢谢
-c, --checksum    skip based on checksum, not mod-time & size
-r, --recursive   recurse into directories