セント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コマンドを実行して次のことをしたいと思います。
- foo.ext.gzファイルを探す
- gzファイルの内容の抽出そのGZファイルと同じディレクトリにあります
- 元の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
-k
bzip2
xz
gunzipkeep
1つの引数(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"