20

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

我有两个文件夹:

  • 'webroot':保存所有网络文件/图像等

  • 'export':包含从我的 SVN 存储库导出的数千个 PHP、CSS、JS 文档的文件夹。

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

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

  1. 如果导出版本包含的代码与 webroot 版本中的代码不同,则覆盖 webroot 中的文件(实时)
  2. 如果文件被覆盖,请保留文件的权限/用户/组(导出版本替换实时版本)*注意我希望维护 webroots 权限/所有权,但导出的内容
  3. 不提示/停止任何形式的副本(即不冗长)
  4. 递归复制 - 显然我想复制导出中找到的所有*文件文件夹和子文件夹

我对 cp 进行了一些研究-这可以完成工作吗?:

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

3 回答 3

25

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

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

此外,rsync如果您需要,可以通过 SSH 连接将文件从一台主机复制到另一台主机。另外,它有无数的选项,你可以指定它来调整它的行为——查看手册页了解详细信息。

编辑:关于您通过保留权限来澄清您的意思:您可能希望放弃该-p选项。

于 2009-03-02T04:19:15.637 回答
6
  1. -u 如果目标比源旧,则覆盖现有文件夹
  2. -p 保留权限和日期
  3. -f 关闭冗长
  4. -r 使复制递归

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

于 2009-03-02T04:17:57.247 回答
5

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

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

当然,如果您需要保留所有者,则必须以 root 身份进行操作。选项是“通过模式”,意思是位置之间的-p复制;-v是冗长的(但不是交互式的;有区别);-d表示根据需要创建目录;-m表示保留修改时间。默认情况下,如果没有该-u选项,cpio将不会覆盖目标区域中比源区域中的文件更新的文件。

于 2009-03-02T04:18:31.927 回答