TAR-ing on-the-fly

Posted

技术标签:

【中文标题】TAR-ing on-the-fly【英文标题】: 【发布时间】:2017-03-20 17:37:27 【问题描述】:

我正在尝试获取 SAN 上所有目录中的所有文件。我从我的当地人开始测试我想怎么做。因此,在我的 Documents 目录中: ls -sR > documents_tree.txt

只有我的本地人,没关系。它给出了我想要的确切输出。但由于我是在我们的 SAN 上执行此操作,因此我将不得不即时压缩,而且我不确定执行此操作的最佳方式。到目前为止,我有: ls -sR > documents_tree.txt | tar -cvzf documents_tree.tgz documents_tree.txt

当我尝试检查输出时,我无法使用 tar -xvf documents_tree.tar 解压缩文件,然后我将其解压缩。

那么,动态压缩的正确方法是什么?如何准确检查我的工作?在 SAN 上执行相同的过程时这会起作用吗?

【问题讨论】:

你不是在压缩文件,你只是在压缩文件名列表。那是你真正想要的吗? 你到底想做什么?您显示的 sn-p 将 ls -sR 的输出写入文件,同时启动 tar 进程,将该文件写入 gzip 压缩的 tar 存档。您在lstar 之间进行了一场比赛,即前者是否在后者开始读取文件之前完成。我不确定重定向和管道之间的相互作用是什么(它们都作用于ls 的标准输出)。如果你只是想归档一个目录,tar czvf directory.tgz directory/ 不就行了吗? 在 SAN 上执行此操作没有什么特别之处。 SAN 对应用程序来说就像普通文件一样。 顺便说一句:不要将ls 的输出用于除人工阅读之外的任何内容。请改用find,如果您可能有奇怪的文件名,请使用find -print0 查看这个问题的接受答案find-files-and-tar-them 【参考方案1】:

压缩单个文件不需要使用tar,使用gzip即可:

ls -sR | gzip > documents_tree.txt.gz

然后您可以使用gunzip documents_tree.txt 解压缩它,或使用gzcatzless 等工具来查看它,而无需先解压缩它。

【讨论】:

谢谢,这行得通。我希望ls 有一个详细模式....我不知道它是否真的在做任何事情,或者这个 san 实际上是那么大。 您可以使用ls -sR | tee /dev/tty | gzip > documents_tree.txt.gz。然后你会看到ls 输出与它被写入 gzip 文件并行。【参考方案2】:

根据您对 OP 的评论并使用您的初始命令,以下内容对我有用:

ls -sR > 文档树.txt && tar -cvzf 文档树.tgz 文档树.txt

【讨论】:

以上是关于TAR-ing on-the-fly的主要内容,如果未能解决你的问题,请参考以下文章