web-dev-qa-db-ja.com

タイムスタンプとプッシュタイムスタンプで生成されたログを使用してフォルダを毎日作成するシェルスクリプト

30分ごとに実行され、次のようなタイムスタンプ付きのログファイルを生成するcronジョブがあります。

test20130215100531.log, 
test20130215102031.log  

日付のタイムスタンプが付いたフォルダを毎日1つ作成し、生成時にログファイルをそれぞれの日付フォルダにプッシュしたいと思います。

私はbashを使用してAIXサーバーでこれを達成する必要があります。

6
user1746666

たぶんあなたはこのようなスクリプトを探しています:

#!/bin/bash

shopt -s nullglob  # this line is so that it does not compain when no logfiles are found
for filename in test*.log; do # Files considered are the ones startign with test and ending in .log
    foldername=$(echo "$filename" | awk '{print (substr($0, 5, 8));}'); # The foldername is characters 5 to 13 from the filename (if they exist)
    mkdir -p "$foldername"  # -p so that we dont get "folder exists" warning
    mv "$filename" "$foldername"
    echo "$filename $foldername" ;
done

私はあなたのサンプルでのみテストしたので、重要なものを含むディレクトリで使用する前に適切なテストを行ってください。

コメントに応じて編集:

元のスクリプトを次のように変更します。

foldername=$(date +%Y%m%d)
mkdir -p  /home/app/logs/"$foldername"
sh sample.sh > /home/app/logs/"$foldername"/test$(date +%Y%m%d%H%M%S).log

または、ディレクトリが別の場所に作成されている場合は、次のようにします。

sh sample.sh > /home/app/logs/$(date +%Y%m%d)/test$(date +%Y%m%d%H%M%S).log
14
user000001

Logrotateを使用する必要があります!すでにこれを行うことができ、同じログファイルに書き込むことができます。

情報については、マニュアルページを確認してください: http://linuxcommand.org/man_pages/logrotate8.html

2
Billy Lazzaro