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

我有两个文件夹:

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

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

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

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

  1. 如果导出的版本包含与WebRoot版本(live)中的代码不同的代码,则在WebRoot中覆盖该文件
  2. 如果文件被覆盖(替换实时版本的导出版本),请保留权限/用户/组
  3. 没有任何形式的副本的提示/停止(即不详细)
  4. 递归副本 - 显然我想复制所有*文件夹和子文件夹中的所有*

我对 cp 做了一些研究 - 这能完成这项工作吗?:

cp -pruf ./export /path/to/webroot
有帮助吗?

解决方案

可能会,但任何时候相应的文件 exportwebroot 具有相同的内容但不同的修改时间,您最终会执行不必​​要的复制操作。你可能会得到稍微聪明的行为 rsync:

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

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

编辑: :关于您对保留权限含义的澄清:你可能想要放弃 -p 选项。

其他提示

  1. -u 如果目标比源旧,则覆盖现有文件夹
  2. -p 保留权限和日期
  3. -f 关闭详细信息
  4. -r 使复制递归

所以看起来你已经获得了 cp 的所有正确参数

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top