네, split 명령은 이미 생성된 파일을 분할하는 데 사용됩니다. 즉, tee로 생성된 로그 파일을 작성 중에 분할하는 것은 불가능하며, 로그 파일이 완전히 생성된 후에야 split 명령을 사용할 수 있습니다.
split 동작 방식
파일 크기를 기준으로 분할:
split -b 100M large_file.txt small_file_-b 100M: 각 분할된 파일의 크기를 최대 100MB로 제한.- 결과 파일:
small_file_aa,small_file_ab, ...
줄 수를 기준으로 분할:
split -l 1000 large_file.txt small_file_-l 1000: 각 분할된 파일에 최대 1000줄 포함.
결과 파일 이름 지정:
split -b 50M large_file.txt --additional-suffix=.log small_file_- 결과 파일:
small_file_aa.log,small_file_ab.log, ...
- 결과 파일:
실시간 분할이 필요한 경우
split은 사후 작업이므로 실시간으로 로그를 분할하려면 다른 방법이 필요합니다.
실시간 로그 분할 대안
1. logrotate (실시간 로그 관리)
logrotate를 사용하면 로그 파일 크기가 일정 크기 이상이 되면 자동으로 분할 가능.
설정 예제:
/path/to/logfile.txt {
size 100M
rotate 5
copytruncate
compress
}
2. 스크립트를 통한 실시간 분할
아래와 같은 Bash 스크립트를 작성하여 로그를 실시간으로 분할할 수 있습니다.
#!/bin/bash
output_dir="./logs"
mkdir -p "$output_dir"
file_prefix="logfile"
max_size=100000000 # 100MB
current_file="${output_dir}/${file_prefix}_part1.txt"
part=1
while read -r line; do
echo "$line" >> "$current_file"
if [ $(stat -c%s "$current_file") -ge $max_size ]; then
part=$((part + 1))
current_file="${output_dir}/${file_prefix}_part${part}.txt"
fi
done
사용:
command | ./split_logger.sh
결론
split: 생성된 파일을 나누는 데 적합.- 실시간 로그 분할:
logrotate, 스크립트, 또는multilog와 같은 다른 도구를 사용하는 것이 적합합니다. 필요에 따라 위 방법을 선택하면 됩니다.
'IT > 리눅스' 카테고리의 다른 글
| 쉘스크립트 - echo 로 멀티 라인 문자열 저장하는 방법 EOF (0) | 2025.02.06 |
|---|---|
| grep 으로 문자열 검색하기 (0) | 2025.01.22 |
| tcl - regsub 문자열 치환 함수 (0) | 2025.01.13 |
| 쉡 스크립트 if []; then 에 등장하는 세미콜론의 의미? (0) | 2025.01.09 |
| 쉡 스크립트에서 환경변수 값 비교시 null, empty 체크를 위한 팁 (0) | 2025.01.09 |