ksh 에서 3 개 월 떨 어 진 파일 이동 스 크 립 트

요 구 는 다음 과 같 습 니 다.
3 개 월 동안 의 파일 을/app/tmp 에 남 겨 두 어야 조회 하기 편리 합 니 다.
 
3 개 월 이상 의 두 가지 파일 은 생 성 날짜 에 따라 다른 디 렉 터 리 로 이동 합 니 다. 예 를 들 어/app/tmp/2011/03 은 2011 년 3 월 의 모든 파일 을 표시 합 니 다.
 
마지막 으로 이 스 크 립 트 는 crontab 에 넣 고 매일 실 행 됩 니 다.매일 파일 을/app/tmp/nnnn/nn 안 으로 옮 기 는 것 입 니 다./app/tmp 아래 는 가장 가 까 운 3 개 월 이내 의 파일 입 니 다.
 
(이 스 크 립 트 는/app/test 로 변경 되 어 테스트 전에 환경 에 직접 사용 되 는 것 을 방지 합 니 다)
bug 가 있 을 수 있 습 니 다. 쓴 논리 도 가장 정교 하 지 는 않 지만 ksh 의 특징 을 조금 배 운 셈 입 니 다.ksh 의 산수 연산 과 사용자 정의 함수 에 대해 가장 간단 한 예 가 있 습 니 다.
 

  
  
  
  
  1. #!/bin/ksh 
  2.  
  3. function month_to_num { 
  4.         typeset month=$1 
  5.         case $month in 
  6.                 "Jan") print 1;; 
  7.                 "Feb") print 2;; 
  8.                 "Mar") print 3;; 
  9.                 "Apr") print 4;; 
  10.                 "May") print 5;; 
  11.                 "Jun") print 6;; 
  12.                 "Jul") print 7;; 
  13.                 "Aug") print 8;; 
  14.                 "Sep") print 9;; 
  15.                 "Oct") print 10;; 
  16.                 "Nov") print 11;; 
  17.                 "Dec") print 12;; 
  18.         esac 
  19.  
  20.  
  21. file_dir="/app/test" 
  22. flag=0 
  23. oldest_file_name=`ls -lt $file_dir| grep -E "txt|xml" | tail -1 | awk '{print $9}'
  24. oldest_file_month_tmp=$(istat $file_dir/$oldest_file_name | grep modified | awk '{print $4}'
  25. oldest_file_month="`month_to_num "$oldest_file_month_tmp"`" 
  26. oldest_file_day=`istat $file_dir/$oldest_file_name | grep modified | awk '{print $5}'
  27. oldest_file_year=`istat $file_dir/$oldest_file_name | grep modified | awk '{print $NF}'
  28. now_month=`date +\%m` 
  29. now_day=`date +\%d` 
  30. now_year=`date +\%Y` 
  31. (( duration= (( now_year - oldest_file_year )) * 12 + now_month - oldest_file_month )) 
  32. echo $duration 
  33. while [[ $flag -ge 0 ]] 
  34. do 
  35.         flag=-1 
  36.         while [[ $duration -gt  3 || $duration -eq 3 && $now_day -eq $oldest_file_day  ]] 
  37.         do 
  38.             flag=0 
  39.                     if [ -d $file_dir/$oldest_file_year/$oldest_file_month/ ] 
  40.                   then 
  41.                     mv $file_dir/$oldest_file_name $file_dir/$oldest_file_year/$oldest_file_month/ 
  42.                   else 
  43.                     mkdir -p $file_dir/$oldest_file_year/$oldest_file_month 
  44.                     mv $file_dir/$oldest_file_name $file_dir/$oldest_file_year/$oldest_file_month/ 
  45.                   fi 
  46.                   oldest_file_name=`ls -lt $file_dir| grep -E "txt|xml" | tail -1 | awk '{print $9}'
  47.                   oldest_file_month_tmp=$(istat $file_dir/$oldest_file_name | grep modified | awk '{print $4}'
  48.                   oldest_file_month="`month_to_num "$oldest_file_month_tmp"`" 
  49.                   oldest_file_day=`istat $file_dir/$oldest_file_name | grep modified | awk '{print $5}'
  50.                   oldest_file_year=`istat $file_dir/$oldest_file_name | grep modified | awk '{print $NF}'
  51.                   (( duration= (( now_year-oldest_file_year )) * 12 + now_month - oldest_file_month )) 
  52.         done 
  53. done 

다음 과 같이 요약 한다.
1. ksh 의 산수 연산 은 비교적 특징 이 있어 야 한다.
2. $() 와 반 쉼표 '' 는 차이 가 많 지 않 은 작용 일 것 이다.
3. 가장 간단 한 사용자 정의 함수 의 쓰기 와 호출.
초등학생 수준의 대본... 잘 부탁드립니다.

좋은 웹페이지 즐겨찾기