Shell 如何在不解压缩文件夹的情况下从多个压缩文件中读取文件内容?
我将许多日志文件压缩到一个名为logfiles.gz的文件夹中 这是用于创建和压缩文件的samlpe:Shell 如何在不解压缩文件夹的情况下从多个压缩文件中读取文件内容?,shell,Shell,我将许多日志文件压缩到一个名为logfiles.gz的文件夹中 这是用于创建和压缩文件的samlpe: touch log1.txt touch log2.txt echo "June 5, 2014. The system works!" >> log1.txt echo "June 5, 2014. The system found a problem at line 3!" >> log2.txt find . -name "log*.txt" |xargs t
touch log1.txt
touch log2.txt
echo "June 5, 2014. The system works!" >> log1.txt
echo "June 5, 2014. The system found a problem at line 3!" >> log2.txt
find . -name "log*.txt" |xargs tar -czvf logfiles.gz
gzip logfiles.gz
我想查看其中一个文件夹(log1.txt)的内容,而无需解压缩整个文件夹甚至该文件
我想使用zcat,但不知道如何指向文件夹中我想要的文件!我试过:
zcat logfiles.gz/log1.txt
但出现以下错误:
(logfiles.gz/log1.txt.Z):不是目录
如果我想使用zcat,如何指向我的文件?或者还有其他方法吗?问题是您正在使用
tar
和gzip
——这是正确的处理方法,但您没有使用tar
的优势来实现这一目标
tar
命令代表“磁带存档”:
tar(磁带存档)命令的用途是管理存档
磁带或磁盘上的文件。Tar存储目录的结构,因此
即整个目录的存档,包括子目录和
可以创建、提取文件或生成目录。焦油
主要用作备份和传输工具。单个文件或
整个目录连同原来的结构,都可以写
到文件或直接到磁带
考虑到这一点,下面是我对shell命令列表的调整,以明确这是一个tar
&gzip
存档
touch log1.txt
touch log2.txt
echo 'June 5, 2014. The system works!' >> log1.txt
echo 'June 5, 2014. The system found a problem at line 3!' >> log2.txt
find . -maxdepth 1 -name "log*.txt" | xargs tar -czvf logfiles.tar
gzip logfiles.tar
注意:我还将echo
行的双引号更改为单引号,以便将感叹号(!
)正确添加到文件中。我添加了一个-maxdepth 1
,因此该命令不会作用于目录中的每个.txt
文件。此外,我还将归档文件名更改为logfiles.tar
,以便可以将其正确压缩为logfiles.tar.gz
完成后,最终生成的文件应为:
logfiles.tar.gz
现在只需使用tar
提取您的特定文件,如下所示:
tar -xvf logfiles.tar.gz log1.txt
tar xfO logfiles.tar.gz log1.txt | less
tar xfO logfiles.tar.gz log2.txt | less
tar xfO logfiles.tar.gz log1.txt | more
tar xfO logfiles.tar.gz log2.txt | more
log1.txt
是tar
存档中文件的完整路径。因此,如果它嵌套在像this/is/a/structure/
这样的文件夹中,那么您可以通过指示this/is/a/structure/log1.txt
来提取该文件
无需运行gzip-d
,因为现代版本的tar
自动知道如何解压缩压缩数据,并直接进入tar
中的内容
编辑:由于原始海报希望查看文件的内容,而不实际解压缩存档,因此应该可以:
tar xfO logfiles.tar.gz log1.txt
tar xfO logfiles.tar.gz log2.txt
这样做的好处是,您可以通过管道将其传输到更少的或更多的,如下所示:
tar -xvf logfiles.tar.gz log1.txt
tar xfO logfiles.tar.gz log1.txt | less
tar xfO logfiles.tar.gz log2.txt | less
tar xfO logfiles.tar.gz log1.txt | more
tar xfO logfiles.tar.gz log2.txt | more
x
和f
选项基本上只是告诉tar
提取文件。这是正常的操作。但其中的神奇之处在于使用O
选项,该选项将强制将输出写入标准输出,而不实际提取文件:
-O (x, t modes only) In extract (-x) mode, files will be written to
standard out rather than being extracted to disk. In list (-t)
mode, the file listing will be written to stderr rather than the
usual stdout.
您的回答告诉我如何解压缩压缩文件夹中的一个文件。我编辑了这个问题,因为我想知道的是如何在不解压缩文件的情况下阅读内容。我使用tar的另一个原因是将文件分组在一起,以便一次压缩所有文件。我会投你一票,因为你的建议使我离我要寻找的东西更近了一步。(但仍在等待更接近的解决方案)@Mahshidzeinal感谢您的澄清。检查我的最新编辑。使用tar xfO logfiles.tar.gz log2.txt应该可以工作。您甚至可以使用|
连接一个管道,将输出重定向到less
或more
。