列出在 tarball 中找到的所有 user:group 的最简单方法是什么?

Ale*_*lke 10 users tar group

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

因为我的旧服务器已经使用了很长时间,所以我有大量的遗留数据,当然还有遗留的用户名和组名。

提取时,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;听起来它们可以极大地使您的用例受益,并且比提前创建所有用户和组要简单得多。


Edu*_*ani 7

快速组装:

团体:

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)

  • 请注意,`sort -u` 可能比`sort | 快。唯一的`。 (3认同)
  • (或者只是 awk: `awk '!seen[$2]++ {print $2}'`) (2认同)