我正在将我的一些数据从我的旧服务器安装到我的新服务器。
因为我的旧服务器已经使用了很长时间,所以我有大量的遗留数据,当然还有遗留的用户名和组名。
提取时,tar 会尽力按名称匹配用户和组信息,并将标识符用作后备或将当前用户用作最后的手段。
我想做的是在提取之前确保所有用户和组都存在。这样所有文件都会获得正确的ID。
为此,我能想到的最好方法是列出在 tar 文件中找到的所有用户名和组名。我知道我可以使用该tar tvf backup.tar命令列出所有文件,但是我必须想出一种方法来提取正确的两个名称。
我想知道是否有比使用该tv选项更简单的方法。一些仅提取用户名和组名的工具或命令行选项,我可以sort -u用来将列表减少到唯一条目。
有人知道这样的功能吗?
Wil*_*ard 15
有趣的问题。通过快速浏览手册页(搜索“用户”,当没有出现结果时,搜索“所有者”)应该执行以下操作:
tar xf thetarball.tgz --to-command='sh -c "echo $TAR_UNAME $TAR_GNAME"' | sort | uniq -c
Run Code Online (Sandbox Code Playgroud)
显然,根据您的需要更改脚本。对于某些用例,您可能需要$TAR_UID和$TAR_GID而不是名称。
我还建议您阅读--owner-map和 的--group-map选项tar;听起来它们可以极大地使您的用例受益,并且比提前创建所有用户和组要简单得多。
快速组装:
团体:
tar tvf thetarball.tgz | awk '{print $2}' | cut -d/ -f2 | sort -u
Run Code Online (Sandbox Code Playgroud)
用户:
tar tvf thetarball.tgz | awk '{print $2}' | cut -d/ -f1 | sort -u
Run Code Online (Sandbox Code Playgroud)
用户/组对:
tar tvf thetarball.tgz | awk '{print $2}' | sort -u
Run Code Online (Sandbox Code Playgroud)