cp --parents 的文件夹权限不允许复制另一个文件

cp --parents 的文件夹权限不允许复制另一个文件

场景:使用普通用户运行的脚本,我想复制多个文件,并复制 dir 结构。例如:

cp --parents /lib/libacl.so /tmp/my_root/
cp --parents /lib/libc.so.6 /tmp/my_root/

预期结果:首先cp,创建 /tmp/my_root/lib 并将 libacl.so 放入其中。第二个cp将 libc.so.6 放入 /tmp/my_root/lib 中。

问题是,第一个cp创建具有以下权限的 /tmp/my_root/lib :dr-xr-xr-x.,因此第二个cp失败,权限被拒绝。

当然,如果我以 root 身份运行脚本,一切都会正常。

一种解决方案可以是先创建目录,然后复制文件,这样目录将具有适当的权限,但我想知道是否有更好的方法来做到这一点,也许是一些标志cp?我检查了那个人,但没有发现任何东西。

答案1

我看不到解决方案cp。您可以用来rsync执行相同类型的副本,它还会创建一个不可写的lib目录,但它能够将新文件添加到该目录中。你的命令变成:

rsync -LR /lib/libacl.so /tmp/my_root/
rsync -LR /lib/libc.so.6 /tmp/my_root/

保留-R目录结构。我添加了-L符号链接,似乎就是这样cp,尽管通常这不是我们想要的。您可以添加-a以保留权限和时间戳(以及所有者/组,如果是 root)。

rsync 通常用于通过网络复制文件,但它是一个非常通用的命令。


如果您没有 rsync,则可以使用其他一些命令来复制文件,但创建一个可写的目录,是tarcpio

tar cf - /lib/libc.so.6 | tar -C /tmp/my_root/ -xf -

或者使用chf跟踪链接。对于 cpio:

ls /lib/libc.so.6 | cpio -pd /tmp/my_root/

使用 -L 来跟踪链接。

相关内容