当忘记 cp -rp [重复] 时仅修复所有权

当忘记 cp -rp [重复] 时仅修复所有权

我有一个/data文件夹,里面有无数的文件和文件夹,花了一晚上的时间来复制。

cp -r /data/* /data2 我通过忘记将其复制为rootp

我在目的地的所有东西都归 root 所有。

我没有删除源代码/data,但如果不需要,我不想重新复制。

有没有办法在源和目标之间仅复制权限或同步权限?

答案1

mtree可以做到这一点,并提供了根本不需要读取文件内容的优点。它仅比较文件元数据,并修改目标以匹配源:

$ sudo mtree -cp /data | sudo mtree -Utp /data2

-c告诉 LHSmtree创建一个以 路径为根的层次结构规范-p/data并且 RHS调用更新以 为根的层次结构的mtree所有者/组/权限-U和修改时间。-t-p /data2

答案2

我会用rsync

rsync -avic --progress /data/ /data2

注意:
尾随//data/故意的,它确保rsync不会创建/data2/data并重新复制其下的所有文件。 (你不需要/尾随/data2

这些选项是:
-a以“archive”命名,但实际上打开了一堆有用的选项(例如递归下降到子目录),这些选项将模仿您的cp -r命令的行为。
-v并使-i副本变得详细,并显示如何rsync设置复制文件的权限和所有权,这在复制过程中非常有用。
-c使用校验和来决定是否应复制每个文件中的数据。这将rsync跳过复制文件内容,仅调整目标文件的所有权/权限。
--progress不是必需的,但显示将任何文件内容复制到目标的进度。

-v和选项-i将使每个文件在终端窗口中至少滚动一行。如果您不想要这个,请忽略它们。如果您希望 rsync 进行详细的试运行,告诉您它将做什么,但不更改文件,您可以添加-n(即)。-avicn因此,对选项进行试运行-avicn --progress,然后仅使用-ac --progress选项进行实际操作可能更适合您。

相关内容