我正在阅读一个
tar
存档,其中包含数字所有者和组 ID。
我想将文件所有权设置为存档中给出的所有权。 假设当然目标机器上的名称到 ID 的映射与存档源上的相同,我该怎么做?
Files.setOwner()
。Files.setOwner()
需要 UserPrincipal
参数。UserPrincipal
接口有一个getName()
方法。tar
存档仅包含数字 ID。UserPrincipal
对象。但似乎没有“干净”的方法来获取与特定数字 uid 关联的用户名(如果存在)。我所说的“干净”是指 JVM 方法,而不是读取和解析 /etc/passwd。
Java 不提供任何直接 API 来从数字 UID 检索操作系统级别用户名。正如您正确指出的那样,UserPrincipal 对象使用用户名,而不是用户的数字标识符。
最彻底的解决方案是合并 JNI(Java 本机接口)或 JNA(Java 本机访问)解决方案。 JNI和JNA可以调用C/C++函数。您可以使用 JNI 或 JNA 调用系统函数
getpwuid
从 UID 中检索用户名。