我有一个特殊的复制(也许是 Robocopy)要求:
我有:
- 源目录(带有子目录)
- 目标目录(带有子目录)
两个目录结构几乎相同。但目标目录中有一些较新或附加的文件。我必须将文件从源复制到目标目录,这些文件不是目标目录中较新的(或添加的)。
例子:
文件 example.doc 存在于源目录和目标目录中。但目标目录中的文件具有较新的时间戳(有人处理过此文件),我想要不是覆盖此文件。
文件 example2.doc 存在于源目录和目标目录中。两个文件具有相同的时间戳。在这种情况下,我想用源目录中的文件覆盖 tartet 目录中的文件。
也许 Robocopy 是这种情况的工具...我阅读了所有参数(有很多:)但我没有找到解决方案。
顺便说一句:这是我在 stackoverflow 上的第一篇帖子 :-)
非常感谢。
格诺特
答案1
您可以使用rsync
带有备份开关的命令-b
,带有“在接收方跳过较新的文件”开关,-u
如以下顺序所示,其中第一个命令rsync
获取文件,第二个命令拒绝覆盖接收方的较新文件,第三个rsync
命令将发送方的较新文件复制到接收方,并将接收方已修改的文件备份为十五~然后用发件人的十五。可以控制移开的文件的位置,并使用–备份目录=DIR选项。
当然,您可以同样轻松地在同一个文件系统上完成所有同步。
(嘿!这就是 Carbon Copy Cloner 的大部分魔力所在!而且他们收取的服务费是 40 美元……唉,我离题了……)
whmcclos@Williams-MacBook-Pro:~$ rsync -auvb ~/bin whmcclos@localhost:/tmp
building file list ... done
bin/
bin/days
bin/hide
bin/jedit
bin/mlf
bin/most_recent_file -> most_recent_file.pl
bin/most_recent_file.pl
bin/mplayer
bin/mvim
bin/qvim
bin/sys_config
bin/sys_config.log
bin/tree
bin/try
bin/unhide
bin/xv
bin/zed -> zed.pl
bin/zed.pl
sent 18887050 bytes received 390 bytes 37774880.00 bytes/sec
total size is 18883599 speedup is 1.00
whmcclos@Williams-MacBook-Pro:~$ touch /tmp/bin/xv
whmcclos@Williams-MacBook-Pro:~$ rsync -auvb ~/bin whmcclos@localhost:/tmp
building file list ... done
sent 422 bytes received 20 bytes 294.67 bytes/sec
total size is 18883599 speedup is 42723.07
whmcclos@Williams-MacBook-Pro:~$ touch /tmp/bin/xv
whmcclos@Williams-MacBook-Pro:~$ touch ~/bin/xv
whmcclos@Williams-MacBook-Pro:~$ rsync -auvb ~/bin whmcclos@localhost:/tmp
building file list ... done
bin/xv
sent 7392 bytes received 10434 bytes 35652.00 bytes/sec
total size is 18883599 speedup is 1059.33
whmcclos@Williams-MacBook-Pro:~$ ls /tmp/bin/xv*
/tmp/bin/xv /tmp/bin/xv~
答案2
文件 example2.doc 存在于源目录和目标目录中。两个文件具有相同的时间戳。在这种情况下,我想用源目录中的文件覆盖 tartet 目录中的文件。
与此相关的命令行开关是:
/IS Include Same files.
笔记:仅使用 /IS 开关(不带任何其他开关)会强制完全刷新目标树。
有关 Robocopy 选项的更多信息,请参阅我撰写的有关 Robocopy 的另一篇文章:https://superuser.com/a/566054/144147,其中包括更多文档的外部链接。