본문 바로가기
개발환경/우분투

대용량 파일을 작은 크기로 분할하는 방법: split

by Kibua20 2021. 5. 20.

CSV와 같은 데이터 파일이 1GB 이상으로 파일 사이즈가 너무 큰 경우 작은 파일 크기로 분할해야 할 때가 있습니다. 또는 디버깅용 로그 파일이 너무 큰 경우 작은 파일 크기로 분할하는 경우도 종종 있습니다. 이러한 파일 분할에 사용할 수 있는 유틸리티가 split입니다. split은 리눅스에서는 coreutils 패키지에서 설치되고 Linux (우분투, CentOS) 뿐 아니라 Mac OS에서 사용할 수 있고, Windows에서는 WSL이나 Cygwin 환경에서 사용할 수 있습니다. 

 

split 사용 예

  • 대용량 1GB CSV 파일을 100MB 단위로 분할 

 

split 사용법과 옵션

split [OPTION]... [FILE [PREFIX]]
→ FILE을 PREFIXaa, PREFIXab, PREFIXac로 분할함 (default 값 사용: 1000 line)

 

split 옵션

-a, --suffix-length=N                 generate suffixes of length N (default 2)
--additional-suffix=SUFFIX       append an additional SUFFIX to file names
-b, --bytes=SIZE                        put SIZE bytes per output file
-C, --line-bytes=SIZE                put at most SIZE bytes of records per output file
-d                                              use numeric suffixes starting at 0, not alphabetic
--numeric-suffixes[=FROM]     same as -d, but allow setting the start value
 -x                                              use hex suffixes starting at 0, not alphabetic
 --hex-suffixes[=FROM]             same as -x, but allow setting the start value
 -e, --elide-empty-files             do not generate empty output files with '-n'
 --filter=COMMAND                   write to shell COMMAND; file name is $FILE
 -l, --lines=NUMBER                 put NUMBER lines/records per output file
 -n, --number=CHUNKS          generate CHUNKS output files; see explanation below
 -t, --separator=SEP               use SEP instead of newline as the record separator; '\0' (zero) specifies the NUL character
 -u, --unbuffered                     immediately copy input to output with '-n r/...'

 

 * SIZE  argument is an integer and optional unit (example: 10K is 10*1024).  Units are K,M,G,T,P,E,Z,Y

 

split 사용 예

bigfile.mp4 1024MB 크기로 기준으로 smallfile_aa, smallfile_ab, smallfile_ac로 분할 

$ split -b 1024m bigfile.mp4 smallfile_

bigfile.mp4 1024MB 크기로 분할  smallfile_aa,  smallfile_ab,  smallfile_ac로 분할 

 

bigfile.mp4 1024MB 크기로 기준으로 smallfile_aa, smallfile_ab, smallfile_ac로 분할하고, mp4 확장자 추가 

$ split -b 1024m --additional-suffix=.mp4 bigfile.mp4 smallfile_

additional-suffix 추가 예제

 

bigfile.mp4 1024MB 크기로 기준으로 smallfile_00, smallfile_01, smallfile_02로 분할하고, mp4 확장자 추가 

$ split -b 1024m --additional-suffix=.mp4 --numeric-suffixes=0 bigfile.mp4 smallfile_ 

--numeric surffix 추가

 

bigfile.mp4 1024MB 크기로 기준으로 smallfile_000, smallfile_001, smallfile_002로 surffix 길이가 3인 파일로 분할하고, mp4 확장자 추가 

$ split -b 1024m --additional-suffix=.mp4 --numeric-suffixes=0 -a 3  bigfile.mp4 smallfile_

-a --suffix-length 옵션 사용 예

 

bigtextfile.txt 200MB 크기로 기준으로 smallfile_00, smallfile_01, smallfile_02로 분할하고, .txt 확장자 추가 

$ split -C 200m  --additional-suffix=.txt --numeric-suffixes=0  bigtextfile.txt  smallfile_ 

-C, --line-bytes=SIZE  사용 예제

bigtextfile.txt 파일을 5개로 분할하고 2자리수 숫자 surffix와 확장자 txt파일로 저장함

$ split --number=5  --additional-suffix=.txt --numeric-suffixes=0  bigtextfile.txt  smallfile_

 -n, --number=CHUNKS  사용 예제

 

파일 합치치는 명령어 cat

split이 파일을 분할하는 용도라면 cat 명령어를 사용해서 파일 하나로 합칠 수 있습니다. 

$ cat SPITED_FILES_AS_LIST > NEW_FILE

→ SPITED_FILES_AS_LIST 을 NEW_FILE로 합치기 

$ ls myfile_part* | sort | xargs cat > myfile_merge

→ myfile_part* 파일을 sort 하고,  cat으로 파일 합치기 

 

관련 글:

[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - 우분투 20.04에서 MariaDB 설치 및 기본 동작 확인 명령어

[SW 개발/REST API] - 자주 사용하는 curl 명령어 옵션과 예제

[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - 우분투 20.04에서 Jupyter Notebook 사용법: Web browser에서 Python 개발 환경 구축

[블로그 관리/티스토리 블로그 관리] - 티스토리 글이 의도치 않은 삭제된 경우 구글 검색 Cache 를 이용해서 복구하기

[개발환경/우분투] - 우분투20.04에서 Bluetooth 5.0 USB 동글 설치: Realtek 8761B Chipset

[개발환경/Tips] - youtube-dl로 Youtube에서 MP3 다운로드 시 아티스트와 앨범 아트(meta data) 포함시키는 방법

[SW 개발/Python] - Python으로 압축 파일 다루기: Zipfile 과 shutil.make_archive()

[SW 개발/Python] - Python: xmltodict를 활용하여 XML를 JSON으로 변환하는 방법

[개발환경/우분투] - 우분투 20.04에서 Grub 편집: grub-customizer 와 Grub theme 설정

[SW 개발/Python] - Python 폴더 및 파일 처리 함수 모음




댓글