使用 Bash,我需要复制并覆盖一些具有相同名称但源内容不同的文件,同时忽略相同的文件。
cp
我在手册中没有看到仅复制不同文件的选项。
首先,我尝试使用cp
“更新”选项,但它不会将旧文件从源复制到目标。
cp -a -u SOURCE DESTINATION
如果我删除该-u
参数,它会正确复制所有文件,但我想避免不必要的复制。
我需要这样的东西:
- 当目标与源不同时,必须复制源文件。
- 有时目的地比源更新。尽管如此,复制还是必须完成。
- 仅当源文件与目标文件相同时,才必须忽略它们。
我该怎么做呢?
答案1
cp
不比较文件内容,仅比较时间戳。
改用rsync
:
rsync -acv SOURCE/ DEST/
要获得更少的输出,请删除该v
标志。
答案2
您可以应用许多可用的校验和命令之一。对于这个简单的情况,一个简单的算法可能就足够了。如果校验和比较相等,则两个文件相同的可能性很高。