![如何在 UNIX 中复制文件和目录并保留文件权限](https://linux22.com/image/1272542/%E5%A6%82%E4%BD%95%E5%9C%A8%20UNIX%20%E4%B8%AD%E5%A4%8D%E5%88%B6%E6%96%87%E4%BB%B6%E5%92%8C%E7%9B%AE%E5%BD%95%E5%B9%B6%E4%BF%9D%E7%95%99%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90.png)
我如何复制文件和目录在 unix 系统上从一个用户到另一个用户,以便文件权限不会改变?收件人不是所有者,但我有 root 权限。
谢谢。
答案1
POSIX 'cp' 命令提供 ' cp -pPR source-dir target-dir
' 来复制文件层次结构。这保留了大部分元数据。如果由 root 运行,则副本将具有原始所有者的所有者和组。如果由普通用户(非 root)运行,则运行脚本的人将拥有这些文件,并且通常,文件的组将是运行脚本的人的有效组。(如果目标目录设置了 SGID 位 - 或者您正在 MacOS X 上运行,则会出现例外情况。)
另一种方法(可能很有益)是使用tar
或cpio
。它们的主要好处是它们可以更好地处理硬链接。该cp
命令将每个文件名视为一个单独的文件,即使它是指向另一个已复制文件的硬链接。相比之下,归档器会识别共性并保留硬链接,从而减少要传输的数据量。归档器的另一个优点是您可以在机器之间移动文件。
您需要检查您的机器的副本tar
是否能够执行您需要的操作,但使用 GNU tar(和 BSD/MacOS tar),您可以执行以下操作:
cd source-dir
tar -cf - . | tar -xf - -C target-dir
你可以这样cpio
做:
cd source-dir
find . | cpio -pdmuB target-dir
请注意,“ find | cpio
”可能会遇到文件名中包含换行符的奇异文件名问题(据我所知,其他字符不会造成麻烦)。