[bash] 특정 파일들의 용량 합산

리눅스 터미널에서는 파이프 기능을 이용해서 다양한 짓을 할 수 있다. |(파이프 명령어)는 앞선 명령어의 표준출력1을 뒤의 명령어의 인자값으로 넘겨 주는 역할을 한다.

이걸 이용해서 css 파일들의 용량만 합산하고 싶다면 아래처럼 사용한다.

ls -al *.css | tr -s ' ' | cut -d ' ' -f 5 | sed 's/^/.+/' | bc | tail -1
  1. tr은 글자를 바꿔주는 프로그램이다. -s는 반복되는 글자를 한 글자로 줄여 준다. 그래서 띄어쓰기 여러 개 된 것을 하나로 줄여 주는 역할을 하는 것이다.
  2. cut은 라인에서 특정 섹션을 지워 주는 역할을 한다. -d는 delimiter의 약자로 구분자를 지정해 주는 것이고, -f는 field의 약자로 특정 필드만 남기라는 뜻이다. 숫자를 적어 준다.
  3. sed는 ‘텍스트를 필터링하고 변경하는 스트림 에디터(stream editor for filtering and transforming text)’인데, 정규식을 바탕으로 문자를 치환할 때 사용한다. 나는 보통 대용량 DB 파일에서 문자를 치환할 때 사용했는데, 여기서는 모든 숫자들 앞에 .+ 문자를 붙여 주는 용도로 사용한다.
  4. bc는 ‘임의의 정확도 계산 언어(An arbitrary precision calculator language)’인데, 그냥 계산기로 쓴다. bc를 실행하고 .+10 엔터, .+20 엔터 해 봐라. 그러면 숫자가 누적해서 더해지는 것을 볼 수 있을 것이다.
  5. tail은 표준출력을 맨 마지막에서 몇 줄 잘라 주는 역할을 하는 프로그램이다. -숫자를 붙이면 해당 숫자만큼 잘라서 보여 준다. -1을 붙인 건 마지막 한 줄만 필요하기 때문이다.

물론 탐색기에서 파일을 찍으면 상태 표시줄에 합산한 용량이 나온다. 이건 그냥 bash 공부라고 생각하자.

응용

find css cssMobile ! -name '*jquery*' | grep .css$ | xargs ls -al | tr -s ' ' | cut -d ' ' -f 5 | sed 's|^|.+|' | bc | tail -1

위 명령은 css와 cssMobile 폴더에서 파일명에 jquery라는 글자가 들어간 것을 제하고 .css로 끝나는 파일들만 뽑은 뒤 용량을 합산하는 명령어다.

  • find에서 ! -name '*jquery*'라고 쓴 게 파일명에 jquery라는 글자가 들어간 것을 제하는 옵션이다.

grep, xargs는 워낙 일반적으로 사용하는 것이니 따로 설명하지 않겠다.

  1. 대충 말하자면, 에러 말고 제대로 나오는 출력. 표준 입력, 표준 출력, 표준 에러 세 가지 표준 스트림이 있다. 

👇 카테고리 글 목록

대표글

댓글 남기기