如何在随机目录中解压缩 gz 文件并将解压缩的文件存储在相同的目录中?

Mik*_*e B 3 bash centos

CentOS 5.9

我有一个带有 foo.ext.gz 文件的服务器,该文件位于各种随机目录中。

例子:

  • /opt/fooapp/foosubdirectory/foo_randomnumber/blah/blah/foo.ext.gz
  • /opt/fooapp/foosubdirectory/foo_differentrandomnumber/blah/blah/foo.ext.gz
  • /opt/fooapp/foosubdirectory/foo_anotherdifferentrandomnumber/blah/blah/foo.ext.gz

我想运行一个 bash 命令,它将:

  1. 找到 foo.ext.gz 文件
  2. 将 gz 文件的内容提取到其各自 GZ 文件所在的同一目录中
  3. 保持原始 gz 文件完好无损。

如果我手动执行此操作,我会从find / -iname foo.ext.gz. 之后,我将复制文件所在的目录并键入以下内容:

gunzip -c /opt/fooapp/foosubdirectory/foo_12345/blah/blah/foo.ext.gz  > /opt/fooapp/foosubdirectory/foo_12345/blah/blah/foo.ext
Run Code Online (Sandbox Code Playgroud)

这里的问题是我需要为几十个文件/目录手动执行此过程。

有没有办法可以利用 xargs 或 for 循环?

Ant*_*hon 5

尽管您可以解析 a 的输出,但find您必须处理空格等。不幸的是gunzip,没有--keep/-k标志可以保留(就像bzip2并且xz确实有)。

如果要制作一个带有gunzipkeep一个参数(gzipped 文件)并进行解压缩的小脚本,请将该脚本放在 $PATH 中的某个位置并使用以下命令调用它:

find /opt/fooapp/foosubdirectory -name "foo.ext.gz" -print0 | xargs -0 --norun-if-empty --max-args 1 gunzipkeep
Run Code Online (Sandbox Code Playgroud)

脚本可能是这样的:

#!/bin/bash
inname=$1
outname=${inname%.gz}

gunzip -c "$inname" > "$outname"
Run Code Online (Sandbox Code Playgroud)