如何递归获取目录的文件权限和所有者,然后将其应用于新服务器上的另一个文件副本

如何递归获取目录的文件权限和所有者,然后将其应用于新服务器上的另一个文件副本

是否可以在 Ubuntu 服务器上获取一个充满文件和子文件夹的文件夹,其中有数百个文件和子文件夹,并且该文件夹中都设置了特殊的文件和文件夹所有者和权限。

为了更好地解释,我在 Ubuntu 服务器上有一个文件夹,其中安装了 SugarCRM 应用程序。

我想知道是否有一种简单的方法来构建一些脚本,该脚本将遍历并设置所有文件/文件夹所有者和权限,因为它们当前在服务器上,以便将来安装。

所以基本上如果我只是复制 sugarcrm 文件夹并将其粘贴到另一台服务器上,脚本是否可以通过并将所有权限和所有者设置为与原始服务器完全相同?

我的最终目标是构建一个 bash 脚本,该脚本可以在 Ubuntu 服务器上使用 RSync 来备份数据库和文件,然后通过 SSH 将它们 RSync 到远程备份服务器。到目前为止,我已经了解了如何生成数据库备份文件以及文件/文件夹的文件夹,然后 rsync 它们。

我的问题出在目标服​​务器上,我不知道如何使用我的备份文件进行恢复并让其保留原始服务器文件和文件夹的所有者和权限。仅恢复和覆盖文件可能会保留权限和所有者,但是我想知道如何使它工作,我可以使用我的备份文件恢复到全新的服务器并设置所有适当的权限和所有者!

答案1

您只需使用在复制文件时保留权限和所有者的工具即可。

经典tar存储所有者和权限在档案本身中,并使用-p--preserve-permissions将在您从该备份档案中提取文件时保留和/或恢复它们。

其他工具也会保留所有者和权限信息,无论是默认情况下还是当您设置正确的标志时,请检查其手册页。

rsync例如有很多选项可以实现这一点:

 -H, --hard-links            preserve hard links
 -p, --perms                 preserve permissions
 -E, --executability         preserve executability
     --chmod=CHMOD           affect file and/or directory permissions
 -A, --acls                  preserve ACLs (implies -p)
 -X, --xattrs                preserve extended attributes
 -o, --owner                 preserve owner (super-user only)
 -g, --group                 preserve group
     --devices               preserve device files (super-user only)
     --specials              preserve special files
 -D                          same as --devices --specials
 -t, --times                 preserve modification times

相关内容