블로그 이미지
초딩입맛제주아재
하고 싶은 것만 하며 살고 싶다

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
2007. 3. 5. 19:47 Programing/아뜰리에
리눅스 명령어중 du는 디스크 사용량을 알려준다.
그런데 du만으로는 뭔가 부족하다.
50메가 이상 사용중인 디렉토리 목록을 보고 싶은데 help를 봐도 내가 원하는 옵션은 없는것 같다.
혹, 나만 모르고 있는 방법이 있을지도 모르겠다.
리눅스가 워낙 막강하니...

그래서 만들었다.
du를 활용해서 내가 원하는 50메가 이상 사용중인 디렉토리를 볼 수 있는 '커스터마이징 du'!!

#!/usr/local/php/bin/php -q
<?php
/**
* filename : mydu(.php)
* author   : asrada2001@hotmail.com
* date     : 2007-03-05
* desc     : 디스크 사용량(du)체크
*
* 사용법 *
*
* chmod로 실행권한(755)을 주면 프롬프트에서 mydu를 타이핑 하는 것으로 실행이 된다.
*
* ~root]# mydu [opt]
* [opt]: 옵션=값
*
* 옵션
* su : 인자 값으로 받은 사이즈보다 큰 결과만 출력
* sd : 인자 값으로 받은 사이즈보다 작은 결과만 출력
* md : max depth
**/

function get_num($val){
 
$temp = '';
  for(
$i=0,$max=strlen($val); $i<$max; $i++){
     
$txt = substr($val,$i,1);
      if(
is_numeric($txt) == true){
         
$temp .= $txt;
      }else if(
$txt == '.' && $temp != ''){
         
$temp .= $txt;
      }
  }
  return
$temp;
}

function
to_kb($val){
 
$num = get_num($val);
 
$unit = strtoupper(substr($val,-1));
  switch(
$unit){
      case(
'M'):
          return
$num * 1024;
      break;
      case(
'G'):
          return
$num * 1024 * 1024;
      break;
      case(
'K'):
          return
$num;
      break;
  }
}

function
print_help(){
  echo
"\n\t[Options]\n"
     
."\tsu=size : size 보다 큰 결과만 출력합니다.\n"
     
."\tsd=size : size 보다 작은 결과만 출력합니다.\n"
     
."\tmd=depth : 출력할 하위 디렉토리 단계를 설정합니다.\n\n"
     
."\t\t예)mydu sd=10M md=4\n\n";
}

$opt = '';

if(
sizeof($argv) > 1){
  for(
$i=1,$max=sizeof($argv); $i<$max; $i++){
     
$tmp_opt = explode('=',$argv[$i]);
     
$tmp_name = $tmp_opt[0];
     
$tmp_value = $tmp_opt[1];
      switch(
$tmp_name){
          case(
'md'):
             
$opt .= ' --max-depth='.$tmp_value;
          break;
          case(
'su'):
             
$size_up = to_kb($tmp_value);
          break;
          case(
'sd'):
             
$size_down = to_kb($tmp_value);
          break;
          case(
'/?'):
             
print_help();
              exit;
          break;
          default:
              echo
"\n[".$tmp_name."] is invalid option...\n";
             
print_help();
              exit;
          break;
      }
  }
}

$command = 'du -h'.$opt;
exec($command,$result);

foreach(
$result as $data){
 
$data_size = substr($data,0,strpos($data,"\t"));

  if(
$size_up != ''){
      if(
$size_up <= to_kb($data_size)){
          echo
$data."\n";
      }
  }else if(
$size_down != ''){
      if(
$size_down >= to_kb($data_size)){
          echo
$data."\n";
      }
  }else{
      echo
$data."\n";
  }
}
?>




php, 역시 속도가 문제다.
C를 잘한다면 du소스를 직접 수정해서 컴파일하겠건만...-_-;;
늘 그렇듯 리팩토링의 여지는 남겨둔다...(귀차니sm)

'Programing > 아뜰리에' 카테고리의 다른 글

Drag가 가능한 메모보드  (26) 2007.01.26
파일 확장자 바꾸는 스크립트  (1) 2006.12.12
XmlHttpRequest를 사용한 일정관리  (0) 2006.11.10
자동 로그 뷰어  (0) 2006.08.21
posted by 초딩입맛제주아재