서비스 사용자가 많지 않아서 로그 파일 설정을 하루마다 rolling 되게 설정했는데 갑자기 사용자가 폭증해서 로그 파일이 매누 커졌다고(Ex: 5G) 가정해 봅시다.


별도의 로깅 솔루션을 붙이지 않았다면 이렇게 큰 로그 파일은 에디터로 열기도 힘들고 grep 같은 TEXT 유틸리티로 패턴을 찾기도 어렵습니다.


split 명령은 파일을 크기나 라인수등 지정한 조건으로 여러 파일 조각으로 분리해주는 프로그램으로 큰 로그 파일이나 TEXT 파일등을 분할해서 처리하는데 사용할 수 있습니다.

split 명령을 실행해도 원본 파일은 남아 있습니다.



test 를 위해서 100 줄짜리 파일에 random string 을 생성하고 split-test 라는 이름으로 저장합니다.

for i in {1..100};do printf "%03d %s\n" $i $(openssl rand -hex 12);done > split-test
BASH


라인수로 분리

파일을 라인수로  분리하려면 -l 옵션 뒤에 분리할 라인수를 적어주면 됩니다. 다음은 split-test 파일을 10개의 파일로 분리해 줍니다.

split -l 10 split-test
BASH
파일명은 xaa로 시작해서 xab, ... xaj 까지 생성됩니다.
$ ls -l

total 44
-rw-r--r-- 1 lesstif lesstif 2900 May 24 22:15 split-test
-rw-r--r-- 1 lesstif lesstif  290 May 24 22:25 xaa
-rw-r--r-- 1 lesstif lesstif  290 May 24 22:25 xab
-rw-r--r-- 1 lesstif lesstif  290 May 24 22:25 xac
-rw-r--r-- 1 lesstif lesstif  290 May 24 22:25 xad
-rw-r--r-- 1 lesstif lesstif  290 May 24 22:25 xae
-rw-r--r-- 1 lesstif lesstif  290 May 24 22:25 xaf
-rw-r--r-- 1 lesstif lesstif  290 May 24 22:25 xag
-rw-r--r-- 1 lesstif lesstif  290 May 24 22:25 xah
-rw-r--r-- 1 lesstif lesstif  290 May 24 22:25 xai
-rw-r--r-- 1 lesstif lesstif  290 May 24 22:25 xaj
CODE



같은 크기로 분리

동일 크기로 분리하려면 -n 옵션 뒤에 분리할 파일의 갯수를 지정하면 되며 맨 마지막 파일을 제외하고는 동일한 사이즈의 파일이 생성됩니다.

다음은 원본을 5개의 파일로 분할합니다.

split -n 5 split-test
BASH


크기를 지정해서 분리

-b 옵션 뒤에 크기를 지정해서 분리할 수도 있습니다.  다음은 각 파일을 120 byte 로 분리합니다.

split -b 120 split-test
BASH


단위를 지정하는 알파벳인 k, m, g를 사용할 수도 있습니다. 다음은 1k(1024 byte) 단위로 파일을 분할합니다.

split -b 1k split-test
BASH


Ref