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