2012-02-13 2 views
1

私のスクリプトは、現在、次のようになります。myLog.log.gzがすでに存在している場合既存の.gzファイルが存在する場合に追加する場合、ファイルを安全にgzipして削除するにはどうすればよいですか?

find Logs/ -type f -name \*.log -exec gzip -q -9 {} \; 

は今のところ、これは失敗します。代わりに私はmyLog.log.gzに追加したいと思います。 gzipのマニュアルページには、gzip -c myLog.log >> myLog.log.gzのようなものがあります。しかし、これは、gzipの終了時にmyLog.logを削除しません。

ファイルを安全にgzipして削除し、必要に応じて既存の.gzに追加するにはどうすればよいですか?

+0

'* .log'にマッチしているので、' * .log.gz'と一致してはいけません。それには '* .log *'が必要です。 –

+2

それは失敗しませんか? gzipはmyLog.log.gzを上書きしたくないので、同じディレクトリにmyLog.logとmyLog.log.gzの両方があると失敗します。 –

+0

はい、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

答えて

1

まず、何をしたいかによって(たとえばアーカイブ目的のみ)、これらの行に沿って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を持つ、それはそれでworlda.log.gzを持つa.logを組み合わせた上記gzip logs/a.logの結果を見ることができます。

多くの理由(たとえば、ディスク容量が足りなくなったり、電源が切れたり、ログが1GBまたはそのようなもの)であれば、明らかに偽造ではありませんが、ほとんどの通常のアプリケーションではその作業を行う必要があります。

これが役に立ちます。

関連する問題