// 10-overwrite_directory_in_linux-linux下覆盖目录方案-20140718
// liuzhengyi
// 2014-07-18
需求:
用一个目录覆盖另一个目录
参见:
尝试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 参数是将目的目录当作普通文件。
为什么会有合并文件夹的效果?