R에서 남은 디스크 공간 읽기
R · 케이플러스 한성탁 ·R에서 남은 디스크 공간을 읽는 함수입니다. stringr 패키지가 필요합니다.
먼저 Sys.info() 함수로 운영체제를 확인합니다. Sys.info()를 이용하면 운영체제 버전이나 32bit/64bit 머신 여부, 사용자 이름 등을 알 수 있습니다.
리눅스일 경우 df, 윈도우일 경우 fsutil 명령어를 system() 함수를 통해 운영체제로 전달합니다. 이때 intern = T 이어야 명령어에 대한 응답을 저장합니다.
잘못된 디스크 경로를 입력했을 경우를 대비해 system()의 응답 status가 1인 경우 NA를 return합니다. 정상적인 응답일 경우 status 속성이 존재하지 않아 if문에서 에러가 나므로 try()를 사용하였습니다.
결과는 메가바이트(MB)로 나옵니다.
- 윈도우
- 리눅스(aws, ubuntu)
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")