// 10-overwrite_directory_in_linux-linux下覆盖目录方案-20140718 // liuzhengyi // 2014-07-18 需求: 用一个目录覆盖另一个目录 参见: http://bbs.chinaunix.net/thread-1987911-1-1.html 尝试0: 直接cp -rf cp -rf dir1 dir2 失败。 会将dir1 复制到dir2下。 原因参见info coreutils 2.8 target directory 尝试1: 使用 mv -T dir1 dir2 当目录都为空时,可以覆盖。 目录非空时,则不可覆盖。 解决方案0: cp -r -T dir1 dir2 会把dir1中的内容复制到dir2中。 但是dir2中原有而dir1中没有的文件不受影响,不会被删除。 相当于合并。 解决方案1: rsync -r --delete dir1 dir2 用dir1中的内容覆盖dir2中的内容。 dir2中原有而dir1中没有的文件会被删除掉。 效果上是dir1覆盖了dir2。 一些理解和疑问: rsync 本身设计用来同步文件,做这件事还是很合适的。 rsync 的--delete 参数可以用来快速删除文件,达到覆盖效果。 但是也要小心使用。以免误删。 cp/mv 的 -T 参数是将目的目录当作普通文件。 为什么会有合并文件夹的效果? |