전체 디렉토리 구조를 자동 출력하고,
특정 파일들(params.yaml, *.launch, package.xml, CMakeLists.txt)의 핵심 내용을 요약해주는 Bash 스크립트
git 배포시 디렉토리 구조를 쉽게 볼수 있으면 처음보는 사람들도 프로젝트를 이해하고 협업하는데 도움이 될것 같다는 생각에 진행하게 되었다.
generate_project_summary.sh 스크립트 설명project_summary.md)generate_project_summary.sh#!/bin/bash
# 📝 출력 파일 초기화
OUTPUT="project_summary.md"
> $OUTPUT
# 🔍 프로젝트 루트 확인
PROJECT_ROOT=$(pwd)
echo "# 📁 Project Summary - $(basename $PROJECT_ROOT)" >> $OUTPUT
echo "" >> $OUTPUT
# 1. 📂 전체 트리 구조 저장 (제한 없음)
echo "## 📂 Directory Structure" >> $OUTPUT
echo '```' >> $OUTPUT
tree -a >> $OUTPUT
echo '```' >> $OUTPUT
echo "" >> $OUTPUT
# 2. 🔍 특정 파일 요약 함수 정의
summarize_file() {
local filepath="$1"
local filename=$(basename "$filepath")
echo "### 📄 $filename (in ${filepath%/*})" >> $OUTPUT
echo '```' >> $OUTPUT
if [[ $filename == *".launch" ]]; then
# launch 파일은 주석 제외한 노드 이름/패키지 요약
grep -E "<node|<param|<arg" "$filepath" | sed 's/^[ \t]*//' >> $OUTPUT
elif [[ $filename == "params.yaml" ]]; then
grep -Ev "^[ \t]*#|^$" "$filepath" | head -n 20 >> $OUTPUT
elif [[ $filename == "CMakeLists.txt" ]]; then
grep -E "(find_package|catkin_package|add_executable|target_link_libraries)" "$filepath" >> $OUTPUT
elif [[ $filename == "package.xml" ]]; then
grep -E "<(name|version|description|depend)>" "$filepath" >> $OUTPUT
else
head -n 20 "$filepath" >> $OUTPUT
fi
echo '```' >> $OUTPUT
echo "" >> $OUTPUT
}
# 3. 📌 요약할 타겟 파일 목록 정의 및 루프
echo "## 📌 주요 설정 파일 요약" >> $OUTPUT
echo "" >> $OUTPUT
find "$PROJECT_ROOT" -type f \( \
-name "params.yaml" -o \
-name "*.launch" -o \
-name "package.xml" -o \
-name "CMakeLists.txt" \) | while read -r file; do
summarize_file "$file"
done
echo "✅ Summary generated at $OUTPUT"
generate_project_summary.sh 라는 파일로 저장chmod +x generate_project_summary.sh
./generate_project_summary.sh
cat project_summary.md
# 📁 Project Summary - ouster_ws
## 📂 Directory Structure
ouster_ws
├── src
│ ├── lio_sam
│ │ ├── config
│ │ │ └── params.yaml
│ │ ├── launch
│ │ │ └── run.launch
...
imuTopic: "/imu/data"
lidarTopic: "/ouster/points"
N_SCAN: 128
Horizon_SCAN: 1024
<node pkg="lio_sam" type="lio_sam_node" name="lio_sam"/>