当前位置: 首页 > 知识库问答 >
问题:

Perl|Archive::Tar|文件提取后拒绝访问|“保留权限”

裴硕
2023-03-14

我很难理解为什么在从tar文件中提取文件后无法打开它们。当我试图打开或读取刚刚从tar中提取的文件内容时,我会收到一条“访问被拒绝”错误消息。我正要在StackOverflow上发布这个问题,这时我终于发现我做错了什么。我想我会把这个问题和答案张贴给将来需要它的人。简单的解决方案是只使用Perl Tar以外的东西,但是。。。

~~~问题~ ~~

提取tar文件的内容。如果您在尝试打开或读取刚刚从tar文件中提取的文件时收到访问被拒绝消息,可能是因为对文件/目录进行tar时未保留权限。

~~~解~ ~ ~

如所述:

http://perldoc.perl.org/Archive/Tar.html#GLOBAL-VARIABLES

默认情况下,Archive::Tar将尝试对文件进行chmod(权限混乱)。要防止出现这种情况,需要将以下全局变量设置为“0”:

$Archive::焦油::CHMOD=0;#保留权限

~~~~~~~~~~~~~~~~

下面的代码展示了如何在perl代码中使用全局变量(欢迎其他评论/建议/批评)…

#folder structure:

# /cygdrive/c/00_backup_base  
#                |
#                |
#                +---- base
#                        |
#                        |
#                        +----00_TEST


#!/usr/bin/perl

use strict;   
use warnings 'all';   
use Archive::Tar;   
use File::Find;
use File::Copy;

my $ACID='/cygdrive/c/00_backup_base'; 
my $myTarFile='base_tar.gz';
my $testDir="00_TEST";
my $base='base';

# ----- ZIP DIRECTORY ----
  my @inventory = (); #array, store list of director contents
  chdir $ACID or die "chdir failed on $ACID\n";
  find (sub { push @inventory, $File::Find::name }, "$base");

  #_Create a new tar object
  $Archive::Tar::CHMOD = 0; # PRESERVE PERMISSIONS!
  my $tar = Archive::Tar->new();

  $tar->add_files( @inventory );

  # Write compressed tar file
  print " Create Zip file \n";
  $tar->write( "$myTarFile"); 
  chdir "../..";

# ----- EXTRACT FILES -----
  chdir $ACID;
  copy("${archive}", "${testDir}/${archive}"); 
  chdir ${testDir};

  # Now extract:
  $Archive::Tar::CHMOD = 0; # PRESERVE PERMISSIONS!
  my $tar_b = Archive::Tar->new();   
  $tar_b->read( $myTarFile );   
  $tar_b->extract();     

共有1个答案

屈健柏
2023-03-14

在最初的帖子中回答

欢迎其他意见/建议/批评

~~~解~ ~ ~

如果您在尝试打开或读取刚刚从tar文件中提取的文件时收到访问被拒绝消息,可能是因为对文件/目录进行tar时未保留权限。

如所述:

http://perldoc.perl.org/Archive/Tar.html#GLOBAL-VARIABLES

默认情况下,Archive::Tar将尝试对文件进行chmod(权限混乱)。要防止出现这种情况,需要将以下全局变量设置为“0”:

$Archive::焦油::CHMOD=0;#保留权限

 类似资料:
  • 问题内容: 我在FoxPro 6.0命令窗口中使用SQL命令,并遇到“文件访问被拒绝”。 我的SQL命令是: 情况: Windows 7专业版 FoxPro 6.0 main.dbf被共享给许多用户。 main.dbf不是 隐藏的 ,也不是 只写 任何意见将不胜感激! 问题答案: 此DBF文件位于共享驱动器上吗?如果是这样,则另一个用户可能使文件打开了“排他”,或者您正试图打开文件“排他”。默认状

  • 从今天起,我们的Airflow服务无法访问BigQuery中的查询。所有作业都会失败,并显示以下消息: [2021-03-12 10:17:28079]{taskinstance.py:1150}错误-原因:403获取https://bigquery.googleapis.com/bigquery/v2/projects/waipu-app-prod/queries/e62030d7-36eb-4

  • 我的应用程序的目标SdkVersion=29 我拍了一张照片,它保存在路径: src=/storage/simulated/0/DCIM/Camera/IMG_20201120_091943。jpg 然后我想使用FileInputStream/FileOutputStream将此图像复制到内部存储。虽然,我的应用程序有WRITE/READ存储权限,但当我编码 我收到了一个FileNotFoundE

  • 我在创建目录时遇到了一个问题。在另一个用户创建的子目录中有一个备份文件,它不允许其他用户读取。所以我的tar命令失败了。 我的问题是:我可以忽略这个文件(实际上这个文件并不重要)并标记其余的文件/目录吗?

  • 问题内容: 因此,我只是试图创建一个通过gmail进行导航并自动执行某些任务的代码。我设法成功自动登录到GMail,但是尝试登录页面源时登录后仍然遇到此错误代码。 错误代码 Java代码 注意:我使用的是最新版的Firefox和最新版的Selenium PS:关于类似问题,我经历了11个以上的不同问题,没有人提供明确的解决方案,答案也非常模糊。 问题答案: 伙计们,我很久以前就找到了解决此问题的方

  • 我对spring security&oauth2相当陌生。作为学习的一部分,我试图设置一个OAuth2授权服务器,并保护RESTendpoint免受未经授权的访问。 代码 资源服务器 ProductController.java 未经授权API可以正常工作 如果我们只使用权限(@preauthorize(“hasauthorize('...')”))进行授权,它可以正常工作 作用域在到达oauth