当前位置:  开发笔记 > 运维 > 正文

如何以递归方式将目录复制到另一个目录并仅替换未更改的文件?

如何解决《如何以递归方式将目录复制到另一个目录并仅替换未更改的文件?》经验,为你挑选了3个好方法。

我希望在Fedora中做一个特定的副本.

我有两个文件夹:

'webroot':持有所有网络文件/图像等

'export':包含从我的SVN仓库导出的数千个PHP,CSS,JS文档的文件夹.

导出目录包含许多与root相同的文件/文件夹,但是根目录包含导出中找不到的其他文件/文件夹.

我想通过以下选项将导出的所有内容与我的webroot合并:

    如果导出版本包含的代码与webroot版本内的代码不同,则覆盖webroot中的文件(实时)

    如果文件被覆盖,则保留文件的权限/用户/组(导出版本替换实时版本)*注意我希望保持webroots权限/所有权,但使用导出的内容

    没有提示/停止任何类型的副本(即不详细)

    递归复制 - 显然我想复制导出中找到的所有*文件文件夹和子文件夹

我对cp进行了一些研究 - 这可以做到这一点吗?:

cp -pruf ./export /path/to/webroot

David Z.. 24

它可能,但任何时候相应的文件exportwebroot具有相同的内容但不同的修改时间,你最终会执行不必​​要的复制操作.你可能会从rsync以下方面获得更聪明的行为:

rsync -pr ./export /path/to/webroot

此外,rsync如果您需要这样做,可以通过SSH连接将文件从一个主机复制到另一个主机.此外,它还有许多选项可供您调整以调整其行为 - 请查看手册页以获取详细信息.

编辑:关于你通过保留权限澄清你的意思:你可能想要放弃-p选项.



1> David Z..:

它可能,但任何时候相应的文件exportwebroot具有相同的内容但不同的修改时间,你最终会执行不必​​要的复制操作.你可能会从rsync以下方面获得更聪明的行为:

rsync -pr ./export /path/to/webroot

此外,rsync如果您需要这样做,可以通过SSH连接将文件从一个主机复制到另一个主机.此外,它还有许多选项可供您调整以调整其行为 - 请查看手册页以获取详细信息.

编辑:关于你通过保留权限澄清你的意思:你可能想要放弃-p选项.



2> hhafez..:

    如果目标比源早,则-u将覆盖现有文件文件夹

    -p持有权限和日期

    -f关闭详细程度

    -r使副本递归

所以看起来你得到了所有正确的args到cp



3> Jonathan Lef..:

听起来像是一份工作cpio(因此,GNU tar可能也会这样做):

cd export
find . -print | cpio -pvdm /path/to/webroot

如果你需要保留所有者,你当然必须以root身份完成.该-p选项是"通模式",这意味着位置之间副本; -v是冗长的(但不是互动的;有区别); -d意味着必要时创建目录; -m意味着保留修改时间.默认情况下,如果没有该-u选项,cpio则不会覆盖目标区域中比源区域中的文件更新的文件.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有