R에서 남은 디스크 공간 읽기

R에서 남은 디스크 공간을 읽는 함수입니다. stringr 패키지가 필요합니다.

먼저 Sys.info() 함수로 운영체제를 확인합니다. Sys.info()를 이용하면 운영체제 버전이나 32bit/64bit 머신 여부, 사용자 이름 등을 알 수 있습니다.

리눅스일 경우 df, 윈도우일 경우 fsutil 명령어를 system() 함수를 통해 운영체제로 전달합니다. 이때 intern = T 이어야 명령어에 대한 응답을 저장합니다.

잘못된 디스크 경로를 입력했을 경우를 대비해 system()의 응답 status가 1인 경우 NA를 return합니다. 정상적인 응답일 경우 status 속성이 존재하지 않아 if문에서 에러가 나므로 try()를 사용하였습니다.

결과는 메가바이트(MB)로 나옵니다.

windows

linux


available_disk_space = function(disk_name){
  if(require(stringr)){
    # amazon linux server
    if(Sys.info()[1] == "Linux"){
      cmd = str_c("df -m | grep -oP '", disk_name, ".* \\K\\d+(?=\\s+\\d+%)' ")
      disk_space = system(cmd, intern = T)
      try(if(attr(disk_space, "status") == 1) return(NA), silent = T)
      return(as.numeric(disk_space))
      # windows
    } else if(Sys.info()[1] =="Windows") {
      
      cmd = str_c("fsutil volume diskfree ", disk_name)
      disk_space = str_extract(system(cmd, intern = T)[1], "[0-9]+")
      try(if(attr(disk_space, "status") == 1) return(NA), silent = T)
      return(as.numeric(disk_space)/1024^2)
    }
  } else {
    stop("install stringr package")
  }
}

available_disk_space("C:")
available_disk_space("/xvda1")