まず、何をしたいかによって(たとえばアーカイブ目的のみ)、これらの行に沿って2つのファイルまたはそのどれかをちょうどtar
するのが適切かもしれません。ただし、以下は要件を説明したものです。
私は本当にこれを行うために、より簡潔な方法があります:)願っていますが、1本will do the jobことを欠け:
find logs -type f -name \*.log -exec sh -c '
if [ -f "{}.gz" ]; then
tmpf=`mktemp tmpXXX`
mv "{}" $tmpf
gunzip "{}"
cat $tmpf >> "{}"
gzip "{}"
rm $tmpf
else
gzip {}
fi
' \;
はここで小さなテストスクリプトだ - test-gzip-combine.sh
と実行で以下、gzip-combine.sh
に上記を入れてそれはいくつかの一時フォルダに)(あなたが見ることができるように、それは:)そのフォルダの下にlogs
を削除しますので、あなたが実際にログを持ってどこどこかでそれを実行しないでください):
は
# Make sample logs
rm -rf logs
mkdir logs
echo "hello" > logs/a.log
gzip logs/a.log
echo "world" > logs/a.log
echo "miss" > logs/b.log
echo "think" > logs/c.log
# Run
./gzip-combine.sh
# Test
for i in logs/*; do
echo ---- $i
gzip -l $i
gunzip -c $i
done
出力は次のようになります。
$ ./test-gzip-combine.sh
---- logs/a.log.gz
compressed uncompressed ratio uncompressed_name
38 12 50.0% logs/a.log
hello
world
---- logs/b.log.gz
compressed uncompressed ratio uncompressed_name
31 5 120.0% logs/b.log
miss
---- logs/c.log.gz
compressed uncompressed ratio uncompressed_name
32 6 100.0% logs/c.log
think
だからあなたはそれでhello
を持つ、それはそれでworld
とa.log.gz
を持つa.log
を組み合わせた上記gzip logs/a.log
の結果を見ることができます。
多くの理由(たとえば、ディスク容量が足りなくなったり、電源が切れたり、ログが1GBまたはそのようなもの)であれば、明らかに偽造ではありませんが、ほとんどの通常のアプリケーションではその作業を行う必要があります。
これが役に立ちます。
'* .log'にマッチしているので、' * .log.gz'と一致してはいけません。それには '* .log *'が必要です。 –
それは失敗しませんか? gzipはmyLog.log.gzを上書きしたくないので、同じディレクトリにmyLog.logとmyLog.log.gzの両方があると失敗します。 –
はい、manページの例は 'gzip -c file1> fooです.gz; gzip -cファイル2 >> foo.gz'連結されるファイル名はgzファイルとは異なります。あなたが持っているものはあなたの既存のmyLog.log.gzを混乱させるでしょう、あるいは、少なくとも.gzファイルにたくさんの重複データが格納されている、つまり 'ver1log >> log.gz; ver2log >> log.gz ver3log >> log.gz'幸運を祈る。 – shellter