我很难理解为什么在从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();
在最初的帖子中回答
欢迎其他意见/建议/批评
~~~解~ ~ ~
如果您在尝试打开或读取刚刚从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