我在两个不同的路径中有两个目录,它们之间有一些常见的子目录和文件我想将第一个目录的内容复制到第二个目录,同时我需要相同的权限,但复制文件后权限现在更改为我的文件的权限是-rwxr-xr-x
应该改为lrwxrwxrwx
。
如何更改此格式的权限?
答案1
我经常rsync
在复制时用于保存文件权限。
rsync [OPTION...] SRC... [DEST]
使用该-p
选项将保留权限:
-p, --perms
保留权限
并使用-a
(archive) 将添加更多选项:
-a, --archive
归档模式;等于 -rlptgoD(无 -H、-A、-X)
看man rsync
了解使用详情和更多选项。
答案2
如果原始文件权限以l
而不是开头-
,那么它们不是文件,而是指向其他文件/目录的符号链接。
无论您使用什么命令来复制它们,都会复制它们引用的实际文件,而不是符号链接。只有符号链接l
在权限显示的开头有一个 ,普通文件以-
.换句话说,没有问题。
如果您想复制符号链接(而不是它们指向的文件),请阅读您用来复制文件的工具的手册页(cp
也许?您没有指定)并查看它是否有不跟踪符号链接的选项。
同样,大多数复制工具(cp
、rsync
等)都具有保留原始权限的选项 - 因此复制的文件不会使用您的umask
.
请注意,只有 root 可以完全保留复制文件的所有权、组和所有权限,因为普通用户无法创建其他人或他们不属于的组所拥有的文件。
答案3
既然你的问题有/cp 标签,我假设你使用了cp。来自cp 的 coreutils 文档:
从符号链接复制时,cp 通常仅在不递归复制或使用 --link (-l) 时才遵循链接。可以使用 --archive (-a)、-d、--dereference (-L)、--no-dereference (-P) 和 -H 选项覆盖此默认值。如果指定了多个选项,则最后一个选项会默默地覆盖其他选项。
要复制符号链接而不是链接文件,您可以使用该-d
标志,如下所示cp
:
cp -d SOURCE DEST
该-d
标志将强制cp
将符号链接复制为符号链接。来自coreutils 文档:
将符号链接复制为符号链接,而不是复制它们指向的文件,并在副本中保留源文件之间的硬链接。相当于 --no-dereference --preserve=links。
如果您在此复制过程中使用了其他标志,您应该能够简单地添加-d
到您的标志中,除非其他标志之一是-l
、-a
、-L
、-P
或-H
(请参阅上面有关使用多个选项的注释)。在这种情况下,您必须小心标志的顺序,或者删除不必要的标志。