숨은 제어문자 제거 도구
숨은 제어문자 제거 도구
Jekyll 블로그의 마크다운 파일에서 숨은 제어문자를 찾아 제거하는 도구들입니다.
🚨 문제 상황
외부에서 복사-붙여넣기할 때 보이지 않는 제어문자가 포함되어 RSS 피드 생성 시 XML 파싱 오류가 발생할 수 있습니다:
error on line 94 at column 99: CData section not finished
🛠️ 제공 도구
1. Python 스크립트 (권장)
- 파일:
clean-control-chars.py
- 장점: 크로스 플랫폼, 안전한 파일 처리, 상세한 로그
- 요구사항: Python 3.6+
2. Bash 스크립트
- 파일:
clean-control-chars.sh
- 장점: 빠른 실행, 시스템 도구 활용
- 요구사항: Unix/Linux/macOS, sed 명령어
3. Makefile
- 파일:
Makefile
- 장점: 간단한 명령어, Jekyll 빌드와 통합
- 요구사항: make 명령어
4. Git 파이프라인 도구
- 파일:
smart-git-add.sh
, Git hooks - 장점: Git add 전 자동 제어문자 정리
- 요구사항: Git 저장소
📖 사용법
Python 스크립트 사용
# 기본 사용 (_posts 폴더 검사)
python3 clean-control-chars.py
# 특정 디렉토리 검사
python3 clean-control-chars.py /path/to/posts
# 읽기 전용 검사
python3 clean-control-chars.py --check-only
# 실행 권한 부여 (필요시)
chmod +x clean-control-chars.py
Bash 스크립트 사용
# 기본 사용 (_posts 폴더 검사)
./clean-control-chars.sh
# 특정 디렉토리 검사
./clean-control-chars.sh /path/to/posts
# 실행 권한 부여
chmod +x clean-control-chars.sh
Makefile 사용
# 도움말 보기
make help
# 제어문자 검사 (읽기 전용)
make check-control-chars
# 제어문자 제거
make clean-control-chars
# 제어문자 정리 후 빌드
make clean-and-build
# 전체 재빌드
make rebuild
🚀 Git 파이프라인 사용 (권장)
방법 1: 스마트 Git Add
# 모든 변경사항을 제어문자 정리 후 스테이징
make git-smart-add
# 또는 직접 실행
./smart-git-add.sh --all
# 특정 파일만 처리
./smart-git-add.sh _posts/tech/new-post.md
# 제어문자만 검사
./smart-git-add.sh --check-only
방법 2: Git Hooks 자동화
# Git hooks 설치
make git-hooks-install
# 또는 직접 설치
chmod +x install-git-hooks.sh
./install-git-hooks.sh
설치 후에는 git commit
을 실행할 때마다 자동으로:
- 제어문자 검사
- 발견 시 자동 정리
- Jekyll 빌드 테스트
- 정리된 파일 재스테이징
방법 3: 안전한 커밋
# 커밋 전 모든 검사 수행
make git-commit-safe
🔍 제어문자 검사 (읽기 전용)
실제로 파일을 수정하지 않고 제어문자만 검사하려면:
# Python 스크립트 사용
python3 clean-control-chars.py --check-only
# Makefile 사용
make check-control-chars
# 스마트 Git Add 사용
./smart-git-add.sh --check-only
🛡️ 안전 기능
- 자동 백업: 처리 전 모든 파일을
backup_YYYYMMDD_HHMMSS/
폴더에 백업 - 재검사: 처리 후 제어문자 완전 제거 확인
- 에러 처리: 파일 읽기/쓰기 오류 시 안전하게 처리
- Git 통합: 자동 스테이징 및 커밋 전 검사
📋 제거되는 제어문자
다음 제어문자들이 제거됩니다 (유용한 문자는 제외):
\x00
- Null\x01
- Start of Heading\x02
- Start of Text\x03
- End of Text\x04
- End of Transmission\x05
- Enquiry\x06
- Acknowledge\x07
- Bell\x08
- Backspace\x0B
- Vertical Tab\x0C
- Form Feed\x0E
- Shift Out\x0F
- Shift In\x10
- Data Link Escape\x11
- Device Control 1\x12
- Device Control 2\x13
- Device Control 3\x14
- Device Control 4\x15
- Negative Acknowledge\x16
- Synchronous Idle\x17
- End of Transmission Block\x18
- Cancel\x19
- End of Medium\x1A
- Substitute\x1B
- Escape\x1C
- File Separator\x1D
- Group Separator\x1E
- Record Separator\x1F
- Unit Separator\x7F
- Delete
🔒 유지되는 문자
다음 문자들은 유지됩니다:
\x09
- Tab (탭)\x0A
- Line Feed (개행)\x0D
- Carriage Return (캐리지 리턴)
📝 사용 예시
1. 정기적인 검사
# 매주 한 번 제어문자 검사
make check-control-chars
2. 새 포스트 작성 후
# 새 포스트 작성 후 제어문자 정리
make clean-control-chars
3. 빌드 전 정리
# 빌드 전 제어문자 정리 및 빌드
make clean-and-build
4. Git 작업 전 정리
# Git add 전 자동 정리
make git-smart-add
# 또는 특정 파일만
./smart-git-add.sh _posts/tech/new-post.md
5. 커밋 전 안전 검사
# 커밋 전 모든 검사
make git-commit-safe
6. 자동화된 Git Hooks
# Git hooks 설치 (한 번만)
make git-hooks-install
# 이후 git commit 시 자동 검사
git commit -m "새 포스트 추가"
⚠️ 주의사항
- 백업 확인: 스크립트 실행 전 중요한 파일 백업
- Git 상태: 변경사항을 Git에 커밋하기 전에 검토
- 테스트: 정리 후 로컬에서 빌드 테스트
- 권한: 스크립트 실행 권한 확인
- Git Hooks: hooks 설치 후 커밋 시 자동 실행됨
🐛 문제 해결
스크립트 실행 권한 오류
chmod +x clean-control-chars.sh
chmod +x clean-control-chars.py
chmod +x smart-git-add.sh
chmod +x install-git-hooks.sh
Python 모듈 오류
# Python 3 확인
python3 --version
# 필요한 경우 pip 설치
pip3 install --user pathlib
Git Hooks 비활성화
# pre-commit 훅 비활성화
chmod -x .git/hooks/pre-commit
# 다시 활성화
chmod +x .git/hooks/pre-commit
sed 명령어 오류 (macOS)
# macOS에서는 gsed 사용 권장
brew install gnu-sed
�� 지원
문제가 발생하면 다음을 확인해주세요:
- Python 3.6+ 또는 bash 설치 여부
- 파일 권한 설정
- 백업 폴더 생성 가능 여부
- 대상 디렉토리 접근 권한
- Git 저장소 상태
💡 팁: make git-smart-add
를 사용하여 Git add 전에 자동으로 제어문자를 정리하세요!
💡 팁: Git hooks를 설치하면 git commit
시 자동으로 제어문자 검사가 실행됩니다!
💡 팁: 정기적으로 make check-control-chars
를 실행하여 제어문자 문제를 사전에 방지하세요!