Zcat for循环中的多个压缩文件

Posted

技术标签:

【中文标题】Zcat for循环中的多个压缩文件【英文标题】:Zcat multiple compressed files in a for loop 【发布时间】:2018-09-18 03:27:43 【问题描述】:

我对 bash 脚本相当陌生,我一直在 *** 中搜索与我正在寻找的答案相匹配但无法找到完全匹配的答案。如果这已经得到解答,我们深表歉意。

我有多个文件夹,里面有多个压缩文件,有些是 gzip 扩展名,有些没有扩展名。

我能够看到压缩文件内容的唯一方法是这样做

zcat filename.gzip > filename

我的目标是创建一个 for 循环:

    zcat 所有文件并将其输出到一个新文件并在末尾添加一个标识符,例如“-read” 删除压缩文件

谢谢!

【问题讨论】:

【参考方案1】:

要解压缩gzip 将使用findbasenamewhile 循环处理的所有文件:

find . -type f | while read f; do
    set -e # You should probably always script with set -e
           # This will cause the subshell to stop on errors.
    zcat < "$f" > "$f-new" || continue
    rm "$f"
done

这也应该处理出现的任何奇怪的引用。 while 循环将在子shell 中运行,set -e 将在其中设置错误时停止选项,这样如果zcatrm 出现错误,它就不会继续前进,破坏一切就在眼前。

【讨论】:

当我尝试对单个文件进行压缩时会发生这种情况。 ` gunzip -d mambu.Clients_Meta000000000001.gzip gzip: mambu.Clients_Meta000000000001.gzip: 未知后缀 -- 忽略 ` 我收到一个错误 ** gzip: mambu.Clients_Meta000000000001.gzip: 未知后缀 -- 忽略 ** 我能够让它工作的唯一方法是:` gunzip mambu.Clientszcat compressedfile > filename-read ` 太棒了,抱歉。我已经更新了处理该扩展的答案。 谢谢!这适用于文件名中包含 .gzip 的文件。对于没有该扩展名但文件类型相同的文件,您如何处理?我的意思是我有多个没有扩展名的文件,但文件类型是=gzip 压缩数据当我尝试最后一个命令时,我得到了这个。 ```$ 查找。 -name 'mambu*' |读 f; do > set -e # 你应该总是使用 set -e > # 这将导致 subshel​​l 出错时停止。 > zcat $(basename "$f") > 完成 gzip: stdin: 文件意外结束 ```

以上是关于Zcat for循环中的多个压缩文件的主要内容,如果未能解决你的问题,请参考以下文章

Linux常见压缩命令 - gzip,zcat,bzip2,bzcat

从for循环中的列表中解压缩多个参数

解压缩包含多个条目的存档

关于文件与文件系统的压缩与打包命令-Linux(笔记)

将多个不同的队列压缩到Python中的for循环中?

指令篇:文件与文件系统的压缩与解压与打包(归档)与解压___gzipzcat;bzip2bzcat;zip; tar