1

ログファイルをアーカイブするための Bash スクリプトを作成しました。

#!/bin/bash

# Pour chaque dossiers "log" trouvé.
for folder in $(find . -name log -type d )
do :
    # Pour chaque dossier log contenant des fichiers ".log" vieux de +30jours.
    for file in $(find $folder -name "*.log" -mtime +30)
    do :
            # Archiver les fichiers ".log".
        tar czf archive-log.tar.gz $folder/*.log
    done

    # Si une archive existe.
    if [ -e $folder/*.tar.gz ]
         # Déplacer l'archive.
         then mv $folder/*.tar.gz $ARCHIVE
    fi

done

私が経験する出力は次のとおりです。

[logs]$ ll
total 8
drwxr-xr-x 2 webadm webgrp 4096 sep 17 14:26 log_weblogic
-rwxr--r-- 1 webadm webgrp  456 sep 17 14:31 scriptArchivesLog

[log_weblogic]$ ll
total 200
-rw-r----- 1 webadm webgrp 98005 mai 16 04:04 test.log
-rw-r----- 1 webadm webgrp 98005 sep 13 15:29 WLS-CONSOLE-DOMAINE-PUB.log


[logs]$ ll
total 32
-rw-r--r-- 1 webadm webgrp 21734 sep 17 14:31 archive-log.tar.gz
drwxr-xr-x 2 webadm webgrp  4096 sep 17 14:26 log_weblogic
-rwxr--r-- 1 webadm webgrp   456 sep 17 14:31 scriptArchivesLog

スクリプトを実行すると、すべてのファイルがアーカイブにあるのはなぜですか? 一致するファイルだけが欲しいmtime +30

[logs]$ tar tvzf archive-log.tar.gz
-rw-r----- webadm/webgrp 98005 2013-05-16 04:04:00 ./log_weblogic/test.log
-rw-r----- webadm/webgrp 98005 2013-09-13 15:29:03 ./log_weblogic/WLS-CONSOLE-DOMAINE-PUB.log
4

5 に答える 5

10

あなたは、あなたが望むことをすでに実行しているプログラムまたはライブラリがすでに存在するかどうかを確認しないという重大なエラーを犯しました. この場合、おそらくすでにシステムに存在する logrotate があり、/var/log 内のシステム ログファイルを念入りにクリーンアップします。おまけとして、定期的に実行するように既に構成されているため、cron ジョブを設定することを覚えておく必要さえありません。

https://www.linode.com/docs/uptime/logs/use-logrotate-to-manage-log-filesに logrotate の使用に関するチュートリアルがあります。

于 2013-09-17T13:15:54.110 に答える
1

これは、tar コマンドが原因です。

tar czf archive-log.tar.gz $folder/*.log

*.logこれらのファイルのタイムスタンプに関係なく、実際にはすべてのファイルをアーカイブしています。

gnu-tarスイッチがあります:

--newer-mtime=date

このユースケースの場合。

于 2013-09-17T12:46:40.257 に答える
0

これを試して:

for folder in $(find . -name log -type d ) # Pour chaque dossiers "log" trouvé.
do :
    for file in $(find $folder -name "*.log" -mtime +30) # Pour chaque dossier log contenant des fichiers ".log" vieux de +30jours.
    do :
        tar czf archive-log.tar.gz $folder/*.log && rm -f $folder/*.log  # Archiver les fichiers ".log". and remove the copy
    done

    if [ -e $folder/*.tar.gz ] # Si une archive existe.
         then mv $folder/*.tar.gz $ARCHIVE # Déplacer l'archive.
    fi

done
于 2013-09-17T12:46:25.393 に答える