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