如何使用 shell 创建目录的“精确”副本

如何使用 shell 创建目录的“精确”副本

使用 Bash,如何将目录复制到另一个位置,同时保持所有属性完全相同,包括时间戳和权限以及所有其他属性?

答案1

您可能正在寻找的工具是rsync许多 Linux 平台上的标准工具。当与适当的选项一起使用时,它可以出于所有目的将源目录一对一复制到目标。

rsync -aHSAX -ih --progress /path/to/source_dir/ /path/to/target_dir

这将复制整个内容的目录source_dirtarget_dir,同时保留用户、权限、时间戳、ACL 和扩展属性(感谢 @K-att- 提醒我最后两个)并将符号链接复制为符号链接。请注意,复制目标的文件系统必须支持与源所在的文件系统相同的属性,否则您将收到错误消息。

如果您也想复制包含的目录source_dir(即您最终得到一个新创建的目录target_dir/source_dir/),那么您需要省略尾随/source_dir/

另一种方法是使用cp适当的选项。

cp -r --preserve=all /path/to/source_dir /path/to/target_dir

还将递归复制并保留所有支持的属性(所有者、权限、时间戳、ACL、SELinux 上下文、扩展属性)。

相关内容