我正在尝试使用 Apache Compress 库(Java)解压 tar.gz 文件。
解压 tar.gz 时如何使用 Apache Compress 库保留文件权限?
答案1
您提供的细节太少,所以我对我的答案做出了假设。
有多种原因可能导致其未能按预期发挥作用。
tar 档案中提到的用户 ID 和组 ID 在目标机器上不存在。
正在解压存档的目标(子)文件系统不允许这些“权限”与原始权限保持一致。非 Unix 文件系统(如用于目标目录和文件的
vfat
和 )就是这种情况。ntfs
普通用户通常不能这样做。非 root 用户不能将文件和目录的所有权转让给其他用户。
某些目标目录不是真正的目录(例如
/proc
和/sys
),因此其中的文件恢复将不起作用。
我不确定“Apache Compress 库“可以工作,但是当我需要执行类似任务时,我会使用 root 权限解压存档,同时使用与解压目标完全相同的路径。无论 Apache Compress 库如何工作,如果它可以处理tar.gz
文件,它需要能够接受类似于tar
工具。我肯定会使用它。
就像是:
sudo tar xf mytar.tar.gz -C /
将确保所有使用绝对路径存档的文件都将恢复到原来的权限和所有权,并将sudo
权限升级到所需的级别,同时-C /
将文件解压到适当的位置,前提是 tar 存档是使用绝对路径创建的和目标恢复需要放在同一个位置。
现在,由于您正在使用库,因此需要运行整个过程才能root
转移所有权。根据特定的约束和用例,这反过来可能不是一个好主意。
如果您可以生成一个只运行解压任务的进程,则可以让它独自使用 升级权限sudo
。在这种情况下,我会再次使用tar
而不是一个全新的程序。
如果你的需求仅限于文件访问权限而不需要任何所有权信息,你可以检查我的另一个答案。请记住,如果没有正确的所有权信息,简单的访问权限就无法正常工作。