从tar归档中提取选定/特定文件会导致SunOS和Linux上的不同行为
我希望这符合“编程问题”的范畴 我有一个包含以下结构的tar档案:从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
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