Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何递归地将一个目录复制到另一个目录中,并仅替换未更改的文件?_Linux_Filesystems_Copy_Directory_Administration - Fatal编程技术网

Linux 如何递归地将一个目录复制到另一个目录中,并仅替换未更改的文件?

Linux 如何递归地将一个目录复制到另一个目录中,并仅替换未更改的文件?,linux,filesystems,copy,directory,administration,Linux,Filesystems,Copy,Directory,Administration,我想做一个具体的副本在Fedora 我有两个文件夹: “webroot”:保存所有web文件/图像等 “导出”:包含从我的SVN repo导出的数千个PHP、CSS和JS文档的文件夹 导出目录包含许多与根目录相同的文件/文件夹,但是根目录包含在导出中找不到的其他文件/文件夹 我想使用以下选项将export的所有内容与我的webroot合并: 如果导出的版本包含不同的代码,则覆盖webroot中的文件 位于webroot版本(live)中 如果文件被覆盖,则保留文件的权限/用户/组(导出 版本

我想做一个具体的副本在Fedora

我有两个文件夹:

  • “webroot”:保存所有web文件/图像等

  • “导出”:包含从我的SVN repo导出的数千个PHP、CSS和JS文档的文件夹

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

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

  • 如果导出的版本包含不同的代码,则覆盖webroot中的文件 位于webroot版本(live)中
  • 如果文件被覆盖,则保留文件的权限/用户/组(导出 版本替换实时版本)*注意,我希望保留webroots权限/所有权,但保留导出的内容
  • 不提示/停止复制 任何形式的(不冗长的)
  • 递归复制-显然是I 是否要复制所有*文件 在中找到文件夹和子文件夹 出口
  • 我对cp做了一些研究——这能起作用吗

    cp -pruf ./export /path/to/webroot
    
  • -如果目标文件比源文件旧,u将覆盖现有文件文件夹
  • -p保留许可和日期
  • -f关闭冗长
  • -r使副本递归

  • 因此,看起来您获得了所有正确的参数到cp

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


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

    可能会,但任何时候
    导出
    webroot
    中的相应文件都具有相同的内容,但修改时间不同,您将执行不必要的复制操作。您可能会从
    rsync
    中获得稍微聪明的行为:

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


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

    请注意,您的第一个标准并不明确。答案大多假设您的意思是“如果webroot中的文件比export中的文件新,请别管它”。如果您真正的意思是“比较内容,如果有差异,复制导出版本”,那么只需复制所有内容。。。继续…继续…因为新文件将出现,并且在复制后,两者中相同的旧文件将仍然相同-除了修改时间。感谢此反馈-我将更新问题
    rsync -pr ./export /path/to/webroot