Bash 飞来飞去的柏油

Bash 飞来飞去的柏油,bash,unix,compression,tar,on-the-fly,Bash,Unix,Compression,Tar,On The Fly,我正在尝试获取SAN上所有目录中的所有文件。我从我的本地人开始测试我想怎么做。因此,在我的文档目录中: ls-sR>documents\u tree.txt 只有我的本地人,没关系。它给出了我想要的确切输出。但由于我是在我们的SAN上进行压缩的,所以我必须在运行中进行压缩,我不确定这样做的最佳方式。到目前为止,我已经: ls-sR>documents_tree.txt|tar-cvzf documents_tree.tgz documents_tree.txt 当我尝试检查输出时,我不可能在压缩

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

只有我的本地人,没关系。它给出了我想要的确切输出。但由于我是在我们的SAN上进行压缩的,所以我必须在运行中进行压缩,我不确定这样做的最佳方式。到目前为止,我已经:
ls-sR>documents_tree.txt|tar-cvzf documents_tree.tgz documents_tree.txt

当我尝试检查输出时,我不可能在压缩文件后使用
tar-xvf documents\u tree.tar
取消文件tar


那么,动态压缩的正确方法是什么?我怎样才能准确地检查我的工作?在SAN上执行相同的过程时,这是否有效?

您不需要使用
tar
来压缩单个文件,只需使用
gzip

ls -sR | gzip > documents_tree.txt.gz

然后,您可以使用
gunzip documents_tree.txt
对其进行解压缩,也可以使用
gzcat
zless
等工具查看它,而无需先对其进行解压缩。

基于您对OP的评论,并使用您的初始命令,以下内容适用于我:


ls-sR>documents_tree.txt&&tar-cvzf documents_tree.tgz documents_tree.txt

您没有给文件加上焦油,只是给文件名列表加上焦油。这就是你真正想要的吗?你到底想做什么?您显示的代码段将
ls-sR
的输出写入一个文件,同时启动一个
tar
进程,将该文件写入gzip tar存档。您在
ls
tar
之间有一场关于前者是否在后者开始读取文件之前完成的竞赛。我不确定重定向和管道之间的相互作用是什么(它们都作用于
ls
的stdout)。如果您只想归档一个目录,那么
tar czvf directory.tgz directory/
不就可以了吗?在SAN上这样做没有什么特别的。SAN对于应用程序来说就像普通的文件。顺便说一下:除了人工读取,永远不要使用
ls
的输出。如果您可能有奇怪的文件名,请改用
find
,或
find-print0
。请参阅此问题的公认答案谢谢,这很有效。我希望
ls
有一个详细的模式…我不知道它是否真的在做什么,或者这个san实际上有那么大。你可以使用
ls-sR | tee/dev/tty | gzip>documents_tree.txt.gz
。然后您将看到
ls
输出与写入gzip文件的输出并行。