Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从tar归档中提取选定/特定文件会导致SunOS和Linux上的不同行为_Linux_Bash_Tar_Sunos - Fatal编程技术网

从tar归档中提取选定/特定文件会导致SunOS和Linux上的不同行为

从tar归档中提取选定/特定文件会导致SunOS和Linux上的不同行为,linux,bash,tar,sunos,Linux,Bash,Tar,Sunos,我希望这符合“编程问题”的范畴 我有一个包含以下结构的tar档案: Folder1/File1 Folder2/File2 Folder3/File3 Folder4/File4 我的目标是从下面的归档文件中提取特定内容(这是一个巨大的文件,因此被称为hugeArchive.tar) 要提取的数据会自动生成,并通过文本文件“filesToExtract.txt”提供给我 “filesToExtract.txt”的内容: 所以我认为这项任务应该很容易,我会使用 cat filesToExtrac

我希望这符合“编程问题”的范畴

我有一个包含以下结构的tar档案:

Folder1/File1
Folder2/File2
Folder3/File3
Folder4/File4
我的目标是从下面的归档文件中提取特定内容(这是一个巨大的文件,因此被称为hugeArchive.tar)

要提取的数据会自动生成,并通过文本文件“filesToExtract.txt”提供给我

“filesToExtract.txt”的内容:

所以我认为这项任务应该很容易,我会使用

cat filesToExtract.txt|xargs tar-xvf hugeArchive.tar

在SunOS 5.10上,这一性能与预期一致,但在Linux Redhat 6.8上,我收到了错误(尽管一般提取似乎仍然有效,因为文件在之后可用)

输出SunOS 5.10:

x Folder1, 0 bytes, 0 tape blocks
x Folder1/File1, 386 bytes, 1 tape blocks
x Folder2, 0 bytes, 0 tape blocks
x Folder2/File2, 858 bytes, 2 tape blocks
Linux Redhat 6.8上的输出:

Folder1/
Folder1/File1
Folder2/
Folder2/File2
tar: Folder1/File1: Not found in archive
tar: Folder2/File2: Not found in archive
tar: Exiting with failure status due to previous errors
我不知道是什么原因导致了这种情况,所以我到处玩,手动将输入文件
filesToExtract.txt
改为如下:

Folder1/File1
Folder2/File2
现在它可以在Linux上工作,没有任何错误消息。这让我想知道: 也许这是一个覆盖问题?或者tar工具只允许访问每个文件一次

我创建了另一种测试,并再次将
文件更改为extract.txt
,并在其中包含了一个副本:

Folder1/File1
Folder2/File2
Folder1/File1
…在这里,我们再次尝试时出现了相同的错误:

Folder1/File1
Folder2/File2
tar: Folder1/File1: Not found in archive
tar: Exiting with failure status due to previous errors
我不知道它背后是什么(acutally tar应该毫无怨言地覆盖,不是吗?)。你知道吗?我的命令错了吗?我需要改变什么,它可以在Linux上工作,而不必更改
文件到extract.txt


顺便说一句,我在两个系统上都使用了标准的tar实现

提前多谢

编辑:

tripleee建议使用


xargs tar-xvf hugeArchive.tar我可能错了,但似乎没有令人满意的答案

如果我在Linux RH 6.8上执行“手动”操作,将发生以下情况:

测试1:

tar-xvf myHugeArchive.tar文件夹1

这将提取Folder1及其内容(文件1)。我可以随时重复这个命令,而无需删除提取的数据(因此tar-xvf确实会覆盖,就像它应该覆盖的那样)

测试2:

tar-xvf myHugeArchive.tar Folder1/File1

这也可以工作并创建Folder1并提取文件1。 我也可以随时重复这个命令

测试3:

tar-xvf myHugeArchive.tar Folder1 Folder1/File1

这将提取文件夹和文件,是的,但过程仍然失败(如预期的那样),出现问题中描述的错误


结论:


它不能以这种方式使用GNU tar(除了有一个秘密选项参数我不知道…)。最后,似乎我必须先对我的
文件进行预处理并删除那些“重复的”文件,然后才能提取.txt。

我可能错了,但似乎没有令人满意的答案

如果我在Linux RH 6.8上执行“手动”操作,将发生以下情况:

测试1:

tar-xvf myHugeArchive.tar文件夹1

这将提取Folder1及其内容(文件1)。我可以随时重复这个命令,而无需删除提取的数据(因此tar-xvf确实会覆盖,就像它应该覆盖的那样)

测试2:

tar-xvf myHugeArchive.tar Folder1/File1

这也可以工作并创建Folder1并提取文件1。 我也可以随时重复这个命令

测试3:

tar-xvf myHugeArchive.tar Folder1 Folder1/File1

这将提取文件夹和文件,是的,但过程仍然失败(如预期的那样),出现问题中描述的错误


结论:


它不能以这种方式使用GNU tar(除了有一个秘密选项参数我不知道…)。最后,似乎我必须先预处理并删除我的
文件toextract.txt
中的那些“重复项”。

有人遇到了与您相同的问题,他们先提取目录,然后提取文件并收到错误。他们似乎没有找到问题的根源,但是,有一个硬链接,有时会导致该问题的提及。你的tar文件中有硬链接吗?我喜欢这个问题,但你想摆脱这个问题;使用重定向
xargs tar-xvf hugeArchive.tar“两个系统上的标准tar实现”可能不同。虽然Linux默认使用GNUtar,但我很确定SunOS使用它自己的东西。我并不感到惊讶,两者之间存在差异。在SunOS上安装GNU tar将在两个地方给您提供相同的行为。@larsks好吧,您可能是对的(SunOS tar甚至在提取时提供另一个显示字节和块信息的输出),但最终我宁愿有一个解决方案,使用GNU tar运行时没有错误,因为我不想将错误移植到SunOs,而是在Linux上消除它:)@FrankRalphBob不,tar文件中没有硬链接。在您提供的链接中,给定的错误消息(带有硬链接)看起来确实有所不同(它似乎包含对“硬链接”一词的字面引用)。这里的情况并非如此。但该链接中的第7篇文章似乎显示了我在这里遇到的同样问题。。。有人遇到了与您相同的问题,他们首先提取目录,然后提取文件并接收错误。他们似乎没有找到问题的根源,但是,有一个硬链接,有时会导致该问题的提及。你的tar文件中有硬链接吗?我喜欢这个问题,但你想摆脱这个问题;使用重定向
xargs tar-xvf hugeArchive.tar“两个系统上的标准tar实现”可能不同。虽然Linux默认使用GNUtar,但我是p
Folder1/File1
Folder2/File2
tar: Folder1/File1: Not found in archive
tar: Exiting with failure status due to previous errors