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



我希望这符合"编程问题"类别。

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

Folder1/File1
Folder2/File2
Folder3/File3
Folder4/File4

我的目标是从下面的存档中提取特定内容(它很大,因此称为 hugeArchive.tar)。

要提取的数据是自动生成的,并通过文本文件"filesToExtract.txt"提供给我。

"文件提取.txt"的内容:

Folder1
Folder1/File1
Folder2
Folder2/File2

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

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 工具以某种方式只允许访问每个文件一次?

我创建了另一种测试并再次更改filesToExtract.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

我不知道它背后是什么(焦油应该覆盖而不抱怨,不是吗?你有什么想法吗?我的命令错了吗?我必须改变什么,它可以在 Linux 上运行而无需更改filesToExtract.txt.

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

提前非常感谢!

编辑:

Tripleee建议宁愿使用

xargs tar -xvf hugeArchive.tar <filesToExtract.txt

因为这是一个使用重定向的命令。但这只是为了清晰/有效,不会影响整体问题行为

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

如果我在 Linux RH 6.8 上执行"手动"分配,就会发生这种情况:

测试 1:

tar -xvf myHugeArchive.tar Folder1

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

测试 2:

tar -xvf myHugeArchive.tar Folder1/File1

这也适用于创建文件夹 1 并提取文件 1。 我也可以根据需要随时重复此命令。

测试 3:

tar -xvf myHugeArchive.tar Folder1 Folder1/File1

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


结论:

它不能以这种方式与 GNU-tar 一起工作(除了有一个我不知道的秘密选项参数......最后,似乎我必须首先预处理并删除我的filesToExtract.txt的"重复项"。

相关内容

  • 没有找到相关文章

最新更新