【问题标题】:TAR-ing on-the-flyTAR-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

标签: bash unix compression tar on-the-fly


【解决方案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

【讨论】:

    猜你喜欢
    • 2021-06-10
    • 2023-03-06
    • 2011-10-22
    • 2010-12-18
    • 2016-02-06
    • 2018-06-16
    • 2011-05-27
    • 1970-01-01
    • 2019-08-05
    相关资源
    最近更新 更多