본문 바로가기

네, split 명령은 이미 생성된 파일을 분할하는 데 사용됩니다. 즉, tee로 생성된 로그 파일을 작성 중에 분할하는 것은 불가능하며, 로그 파일이 완전히 생성된 후에야 split 명령을 사용할 수 있습니다.


split 동작 방식

  1. 파일 크기를 기준으로 분할:

    split -b 100M large_file.txt small_file_
    • -b 100M: 각 분할된 파일의 크기를 최대 100MB로 제한.
    • 결과 파일: small_file_aa, small_file_ab, ...
  2. 줄 수를 기준으로 분할:

    split -l 1000 large_file.txt small_file_
    • -l 1000: 각 분할된 파일에 최대 1000줄 포함.
  3. 결과 파일 이름 지정:

    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와 같은 다른 도구를 사용하는 것이 적합합니다. 필요에 따라 위 방법을 선택하면 됩니다.

B로그0간

개발 관련 글과 유용한 정보를 공유하는 공간입니다.