在 tar 提取过程中,我可以自动使文件不可执行吗?

在 tar 提取过程中,我可以自动使文件不可执行吗?

我有一个 tar.gz 存档,其中包含一些可执行文件。有没有办法在我提取存档时自动使它们不可执行?我尝试使用 --mode 标志,但它显然没有任何作用。

tar xzf archive.tar.gz --mode 'a-x'

如果可能的话,我想使用 tar 本身设置权限,因为我事先不知道 tar 生成的文件夹的名称是什么。我可以使用 GNU tar 功能。

答案1

如果使用star(包括在希利工具, 经过@希利(死者)) 代替 GNUtar是一种选择,你可以这样做:

star xf file.tar -find ! -type d -chmod a-x

可以使用类似的接口find来操作存档成员。

使用 libarchive's bsdtar,并假设存档不包含除目录常规的而不是硬链接,并且您不关心恢复任何文件元数据,您可以zip在提取之前将存档转换为动态格式(不支持权限):

bsdtar --format zip -cf - @file.tar | bsdtar xvf -

这将创建具有默认权限的所有文件,并且umask还应用了默认权限。因此,使用umask 022,您将获得具有rwxr-xr-x权限的目录和具有rw-r--r--.

使用 GNU tar,您可以实现类似的目标:

tar -xf file.tar --to-command='
  set -o noclobber
  mkdir -p -- "$(dirname -- "$TAR_FILENAME")" &&
    cat > "$TAR_FILENAME"'

附加限制是,它不会创建下面没有常规文件的目录,并且如果某些目录名称以换行符结尾,则会失败。

答案2

您应该能够将设置 aumask与 usingtar--no-same-permissions参数结合起来,从而防止在提取时设置可执行位。

相关内容