본문
#!/usr/bin/ksh
BEGINYEAR=`ls -alR| awk '{print $8}' | grep -v : | sort +0 | grep [0-9] | head -1` #파일중 가장 오래된 연도 추출
LASTYEAR=`date +"%Y"` #현재 연도 추출
NEXTYEAR=0
count(){ #count() 함수 선언, 사실 선언 할 필요는 없으나 결과를 파일로 받아내기 위해서 일부러 구성함. 하단의 전체사이즈를 위한 것임.
while (( $BEGINYEAR <= $LASTYEAR )) # 시작년도에 1을 더해서 현재년도까지 도달하면 종료
do
touch -t ${BEGINYEAR}01010000 $BEGINYEAR # 파일의 연도는 6개월 이상이 되어야만 년도 표시가 되며 그렇지 않은경우 시간으로 표시됨.
NEXTYEAR=`expr $BEGINYEAR + 1` # 이런 문제를 해결하기 위해서 touch -t로 매년 1월 1일 0시에 생성되는 파일을 만들고
touch -t ${NEXTYEAR}01010000 $NEXTYEAR # 다음년도 1월 1일 0시에 생성되는 파일을 만들어서
find . -newer ${BEGINYEAR} ! -newer ${NEXTYEAR} -ls > findresult.txt #find 상에서 -newer 옵션을 이용하여 파일 결과를 저장.
echo "${BEGINYEAR}'s Total Size : \\c" # 년도 출력후
awk 'BEGIN{sum1=0} # find로 추출한 파일에서 해당년도의 파일 사이즈 합계 계산
{sum1+=$7}
END{printf "%13s\n",sum1}' findresult.txt
/usr/bin/rm ${BEGINYEAR} #생성된 임의 파일 삭제
/usr/bin/rm ${NEXTYEAR}
BEGINYEAR=$NEXTYEAR #시작년도에 1을 더해서 다음년도로 이동
done
}
count > result.txt #count()를 호출해서, 결과 값은 result.txt에 저장
cat result.txt #화면에 매년도별 SIZE 합계를 뿌려주고
echo "================================================"
awk -F: 'BEGIN{sum1=0} # 전제 SIZE에 대한 결과도 함께 뿌려줍니다.
{sum1+=$2}
END{printf "Total SIZE : %13s\n",sum1}' result.txt
/usr/bin/rm result.txt # 생성된 불필요한 파일 삭제
exit # 종료
# 파일 size가 많은 경우는 %13s를 보다 큰 수로 변경하면 됩니다.
관련링크
댓글목록
등록된 댓글이 없습니다.