用相同的哈希值替换所有文件

用相同的哈希值替换所有文件

我想用 new.file 替换目标路径中与orignal.file同名且与orignal.file同名的所有文件。执行此操作的命令是什么?

假设我已经更新了文件的内容,现在我希望也更新特定路径中该文件的所有其他副本。

在大多数情况下,以下代码可以工作:

find /target_path/ -iname "original.file" -exec cp new.file '{}' 

然而如果原始文件例如readme.txt,许多不相关的文件将被覆盖。

答案1

这需要在决定运行之前进行测试以查看校验和是否匹配cp,您必须运行一个子shell作为-exec要查找的参数。这应该可以完成这项工作:

find /target_path/ -iname "original.file" -exec bash -c \
  '[[ $(md5sum "original.file") = $(md5sum "{}") ]] && cp "new.file" "{}"' \;

答案2

如果您可以制作文件硬链接的所有相同副本,那么对您来说会更容易。一种方法是使用复制品: 跑步fdupes -L。然后就地更改文件;这将保留硬链接。

如果您只想按名称和内容或按名称和哈希查找文件,只需在命令中添加另一个条件即可find

find /target_path/ -iname "original.file" -exec cmp old.file {} -exec cp new.file {}
find /target_path/ -iname "original.file" \
                   -exec sh -c 'test "$(md5sum | sed "s/ .*//")" = "$1" <"$0"' {} "$(cat old.md5sum)" \
                   -exec cp new.file {}

你没有说你的申请是什么;它可能有助于也可能没有帮助参与一致, 哪个进行远程同步时可以检测不同路径下的相同文件

相关内容