将 IF 内容复制到其中的覆盖文件不同
Posted
技术标签:
【中文标题】将 IF 内容复制到其中的覆盖文件不同【英文标题】:Overwrite file in copying IF content to of them not the same 【发布时间】:2011-12-16 09:48:03 【问题描述】:我有很多文件来自一侧(A)和很多其他文件在其他地方(B)
我是把A复制到B,很多文件都是一样的,但是内容可能不一样!
通常我使用 mc (Midnight Commander) 来执行此操作,并选择“如果不同大小则覆盖”。 但也有大小相同,内容不同的情况。在这种情况下,mc 将文件保存在 B 位置而不是覆盖它。
在 mc 覆盖对话框中有一个工作“更新”我不知道它在做什么?在帮助中没有这样的信息,也许这是一个解决方案?
所以我正在寻找可以帮助我将所有文件从 A 复制到 B 并覆盖 B 位置的文件(如果它们存在并且内容与 A 不同)的解决方案。
如果“B”位置的文件存在(同名)并且内容不同,则每次都必须被“A”位置的文件覆盖。
你知道有什么解决办法吗?
【问题讨论】:
顺便说一句,所有文件都是纯文本文件 【参考方案1】:我会使用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
。
【讨论】:
-c
开关是这里的关键。我想避免“修改”时间戳更改和比较文件 content 而不仅仅是时间戳。谢谢!【参考方案2】:
你试过命令行吗:
cp -ru A/* B/
应该递归地将所有更改的文件(最近的时间戳)从目录 A 复制到目录 B。
您也可以在命令行中使用-a
而不是-r
,具体取决于您要执行的操作。请参阅 cp
手册页。
【讨论】:
这似乎是我需要的 -u 意味着仅当源文件比目标文件更新或目标文件丢失但它查找的时间戳是什么时复制?记录时间 ?确实这不是理想的解决方案,但现在可能最简单,谢谢。【参考方案3】:您可能希望保留某种“索引”文件,其中包含文件的 SHA-1 哈希值,这是您在编写文件时创建的。然后,您可以计算“源”哈希并将其与索引文件中的“目标”哈希进行比较。这仅在此过程是文件写入目标的唯一方式时才有效。
【讨论】:
你知道有什么软件可以做类似的事情吗? 1. 为源文件树做哈希。 2. 为目标文件树生成哈希。 3.比较它并仅复制更改的文件。对吧? 不是随便的,不,但是使用 openssl 库编写自己听起来很有趣:)【参考方案4】:http://linux.math.tifr.res.in/manuals/man/mc.html
当您尝试在现有文件的顶部复制或移动文件时,会显示替换对话框。该对话框显示两个文件的日期和大小。按 Yes 按钮覆盖文件,按 No 按钮跳过文件,按 allL 按钮覆盖所有文件,按 nonE 按钮从不覆盖,如果源文件比目标文件新,按 Update 按钮覆盖。您可以通过按 Abort 按钮中止整个操作
【讨论】:
以上是关于将 IF 内容复制到其中的覆盖文件不同的主要内容,如果未能解决你的问题,请参考以下文章