列出 tarball 中找到的所有用户:组的最简单方法是什么?

列出 tarball 中找到的所有用户:组的最简单方法是什么?

我正在将一些数据从旧服务器安装到新服务器。

由于我使用旧服务器已有多年,因此我拥有大量遗留数据,其中最肯定的是遗留用户和组名称。

提取时,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

相关内容