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