3. OS이야기/03. Shell Script

[UNIX/LINUX] File Size 체크 스크립트

알 수 없는 사용자 2014. 7. 1. 19:28


check_filesize.sh

이전 글에 이어 특정 파일시스템에서 어떤 파일들이 용량을 많이 차지하고 있는지 확인하는 스크립트에 대해 글 올립니다.

먼저 스크립트 전문은 다음과 같습니다.

#!/bin/bash


SEARCH_PATH=${1}        // 특정 용량 이상을 차지하는 file 들을 확인할 디렉토리명

MB_SIZE=${2}                // 어느 정도 용량 이상의 file 들을 확인할 것인지 MB 단위로 지정


cd ${SEARCH_PATH}


### Check File Size more than ${MB_SIZEMB

file_list=`find . -size +${MB_SIZE}M -type f -print`    // ${MB_SIZE} MB 이상의 type 이 file인 것들을 ${SEARCH_PATH} 에서 find 하여 파일명만 file_list 변수에 저장


if [ $? -eq 0 ]; then        // 위 명령이 정상 수행되었다면(return code: 0),


for file in ${file_list}; do        // 파일 리스트들을 하나씩 받아서

ls -l ${file}                    // ls 명령으로 ownership, permission, file size 등을 확인

done

else

echo 'The running of shell command is failed!!'    // find 명령이 정상 수행되지 않았다면, 에러 메시지를 뿌리고 스크립트 종료

exit

fi


위 스크립트 구문은 사실 find 의 옵션 하나만 알고 있다면 다음과 같이 줄일 수 있습니다.

#!/bin/bash


SEARCH_PATH=${1}

MB_SIZE=${2}


cd ${SEARCH_PATH}


### Check File Size more than ${MB_SIZEMB

find . -size +${MB_SIZE}M -type f -exec ls -l {} \;


if [ $? -ne 0 ]; then

        echo 'The running of shell command is failed!!'    // find 명령이 정상 수행되지 않았다면, 에러 메시지를 뿌리고 스크립트 종료

        exit

fi


전후 스크립트의 차이점이라면, find 명령에 exec 옵션을 사용하여 그 아래에 있던 if문과 for문을 없애버린 점인데요.

exec 옵션은 find 명령을 통해 찾은 결과값들을 대상으로 exec 옵션 뒤의 명령들을 수행하겠다는 옵션입니다.

위 예제에서는 ${MB_SIZE} MB 이상 되는 file 들을 찾아서 ls -l 명령을 수행하겠다는 뜻이 되겠죠.

exec 옵션 뒤의 {} 와 \; 의 의미는 다음과 같습니다.

{} : find 에서 찾아낸 검색 결과가 하나씩 들어가는 부분(for문과 같은 역할)

\; : -exec 옵션 다음에 나오는 명령어를 실행


위 주석을 참조하여 스크립트를 이해하시면 되겠고, 원본 스크립트는 파일로 첨부하였습니다.

감사합니다.