任意のディレクトリにgzファイルを解凍し、解凍したファイルを同じディレクトリに保存する方法は?

任意のディレクトリにgzファイルを解凍し、解凍したファイルを同じディレクトリに保存する方法は?

セントOS 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_another その他の乱数/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

ここでの問題は、何十ものファイル/ディレクトリに対してこのプロセスを手動で実行する必要があることです。

xargsまたはforループを利用する方法はありますか?

ベストアンサー1

の出力を解析できますが、findスペースなどを処理する必要があります。残念ながら保存する/フラグgunzipはありません(と同様に)。--keep-kbzip2xz

gunzipkeep1つの引数(gzipファイル)を使用して解凍する小さなスクリプトを作成したい場合は、$ PATHのどこかにスクリプトを置き、次のように呼び出します。

find /opt/fooapp/foosubdirectory -name "foo.ext.gz" -print0 | xargs -0 --norun-if-empty --max-args 1 gunzipkeep

スクリプトは次のとおりです。

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

gunzip -c "$inname" > "$outname"

おすすめ記事