大量解压缩没有 gz 扩展名的 gzip 文件

Nic*_*son 7 compression gzip files

我所拥有的文件数量庞大的具有扩展喜欢.0_1234 .0_4213.0_4132等有些是gzip压缩的,有些是原始邮件。我需要确定哪些是压缩文件,解压缩这些文件,并在解压缩所有压缩文件后将所有文件重命名为通用扩展名。我发现我可以使用 file 命令来确定哪些被压缩,然后 grep 结果并使用sed将输出缩减为文件列表,但无法确定如何解压缩看似随机的扩展名。这是我到目前为止所拥有的

file *|grep gzip| sed -e 's/: .*$//g'
Run Code Online (Sandbox Code Playgroud)

我想使用xargs或某些东西来获取输出中提供的文件列表,并将它们重命名为.gz以便解压缩,或者只是直接解压缩它们。

ter*_*don 5

不要使用gzipzcat而是使用不需要扩展名的。你可以一次性完成整个事情。只需尝试zcat该文件,如果由于未压缩cat而失败,则改为:

for f in *; do 
    ( zcat "$f" || cat "$f" ) > temp && 
    mv temp "$f".ext && 
    rm "$f" 
done
Run Code Online (Sandbox Code Playgroud)

上面的脚本将首先尝试zcat将文件插入temp,如果失败(如果文件不是 gzip 格式),它将只是cat它。这是在子 shell 中运行以捕获运行的任何命令的输出并将其重定向到临时文件 ( temp)。然后,将temp重命名为原始文件名加上扩展名(.ext在本例中)并删除原始文件。

  • 这与调用 `gunzip` 的区别在于 `gunzip` 保留了修改时间。 (2认同)