次のようなタイムスタンプ付きのログ ファイルを生成するために 30 分ごとに実行される cron ジョブがあります。
test20130215100531.log,
test20130215102031.log
日付のタイムスタンプを使用して毎日 1 つのフォルダーを作成し、生成時にログ ファイルをそれぞれの日付フォルダーにプッシュしたいと考えています。
AIXサーバーでbashを使用してこれを実現する必要があります。
次のようなスクリプトを探しているかもしれません。
#!/bin/bash
shopt -s nullglob # This line is so that it does not complain when no logfiles are found
for filename in test*.log; do # Files considered are the ones starting 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 don't 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
logrotate を使用する必要があります。これは既に実行されており、同じログ ファイルに書き込むことができます。
情報については、man ページを確認してください: http://linuxcommand.org/man_pages/logrotate8.html