如何以递归方式复制文件而不覆盖现有权限?

如何以递归方式复制文件而不覆盖现有权限?

当我将文件从一个目录复制到另一个目录时,目录权限会被重置(例如:从 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

相关内容