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 存档。您在ls
和tar
之间进行了一场比赛,即前者是否在后者开始读取文件之前完成。我不确定重定向和管道之间的相互作用是什么(它们都作用于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
解压缩它,或使用gzcat
和zless
等工具来查看它,而无需先解压缩它。
【讨论】:
谢谢,这行得通。我希望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的主要内容,如果未能解决你的问题,请参考以下文章