![如何以递归方式复制文件而不覆盖现有权限?](https://linux22.com/image/840445/%E5%A6%82%E4%BD%95%E4%BB%A5%E9%80%92%E5%BD%92%E6%96%B9%E5%BC%8F%E5%A4%8D%E5%88%B6%E6%96%87%E4%BB%B6%E8%80%8C%E4%B8%8D%E8%A6%86%E7%9B%96%E7%8E%B0%E6%9C%89%E6%9D%83%E9%99%90%EF%BC%9F.png)
当我将文件从一个目录复制到另一个目录时,目录权限会被重置(例如:从 0755 到 0775),这会导致问题,迫使我返回并手动重置目录权限。我目前正在做cp -r /source/directory /destination/directory
我想复制所有文件和新目录,但不覆盖现有目录的权限。
答案1
添加 -p 标志
cp -pR /source/dir /dest/dir
从man cp
:
-p same as --preserve=mode,ownership,timestamps
答案2
为了保留链接,您可以使用cp
(cp 手册页) 带有-d
标志,这相当于--no-dereference --preserve=links
。
要将其与-p
和-R
标志结合,您可以使用存档标志-a
。
答案3
我的~/.bashrc
已被修改为包含
alias cp='cp -i --preserve=all'
这意味着当我使用时cp
,它还会在覆盖(-i
)之前进行提示,并保留所有内容(即模式、所有权、时间戳;如果可能的话还包括附加属性:上下文、链接、xattr)。
如果您愿意,您可以随时将其更改为mode
而不是all
,但我确实喜欢用这个别名来更改 的默认值cp
。