2日後のログファイルの移動

2日後のログファイルの移動

以下に示すように、2日後のログファイルを日付別に新しいディレクトリに移動したいと思います。

源泉:

1) /Test1/Server.log
2) /Test1/Server17032016.log

目的地:

1)/Test2/17032016/Server17032016.log

日付別にディレクトリを作成し、そのディレクトリにファイルを移動します。

答え1

変更された日付を使用してバックアップを実行しないことをお勧めします。

実際のバックアップ当日にバックアップをソートしたくありませんか?

私はそうすることを知っています。

私はこの問題をこうして解決する。

#!/bin/sh

targetDirectory=$2

for file in $1; do 
    if [ -f "$file" ]; then
        if [ $(((`date +%s` - `stat -L --format %Y $file`) > (172800))) -eq 1 ]; then
                today=$(date +"%Y%m%d")
                mkdir -p "$targetDirectory"
                mkdir -p "$targetDirectory/$today"
                mv $file "$targetDirectory/$today"
                echo "$file moved to $targetDirectory/$today/$file"
        fi
    fi
done

(マジックナンバー172800は2日(秒)です。)

次のようにスクリプトを実行します。$ ./movebackup.sh "/Logfolder/*.log" Backups

出力

Server.log moved to Backups/20160319/Server.log
Server17032016.log moved to Backups/20160319/Server17032016.log

cronjobで毎日真夜中に実行します。

答え2

OPは明らかに次のパス名を期待していました。

 /Test1/Server17032016.log

ファイル名の最後の8桁が日付(月、月、年)のように解釈され、ディレクトリ名はその日付から派生すると予想されます。

データが提供されるスクリプトは次のとおりです。

#!/bin/sh
find /Test1 -type f -mtime +2 | while IFS= read -r name
do
    date=$(echo "$name" | sed -e 's,^/Test1/Server,,' -e 's,\.log$,,' )
    [ -z "$date" ]          && continue
    [ "x$date" = "x$name" ] && continue
    mkdir -p /Test2/"$date"
    mv -f "$name" /Test2/"$date/"
done

Serverログファイルがテキストで始まらない場合と、パターンと一致しないファイルを除外する場合は、いくつかの改善が必要です。

関連情報