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로그 파일이 텍스트로 시작하지 않는 경우와 패턴과 일치하지 않는 파일을 제외하는 경우 몇 가지 개선이 필요합니다.

관련 정보