μ•ˆλ…•ν•˜μ„Έμš” JK μž…λ‹ˆλ‹€.

Posting 을 ν•˜λ €κ³  ν•©λ‹ˆλ‹€. κ°„κ²°ν•œ workflow κ°€ μ•„λ‹ˆλ©΄ 지속 적인 posting 이 μ–΄λ ΅κ³  흐지 λΆ€μ§€ 될 것이기 λ•Œλ¬Έμ— μ΅œλŒ€ν•œ κ°„κ²°ν•΄μ•Ό ν•©λ‹ˆλ‹€.

메인 λ©”λͺ¨ λ³΄κ΄€μ†Œκ°€ 있고 blog λ³΄κ΄€μ†Œκ°€ λ”°λ‘œ μžˆμ–΄μ„œ 볡사λ₯Ό ν•΄μ£Όκ³  μ—°κ΄€λœ static file 듀도 같이 볡사 ν•΄μ€˜μ•Ό ν•©λ‹ˆλ‹€.

blog λ³΄κ΄€μ†Œ git 도 push ν•΄μ£ΌλŠ” μ ˆμ°¨λ„ ν•„μš” ν•©λ‹ˆλ‹€.

일련의 절차λ₯Ό shell script 파일 ν•˜λ‚˜λ‘œ λ§Œλ“€κ³  Obsidian 에 shell script λ₯Ό μ‹€ν–‰ν•΄ μ£ΌλŠ” ν”ŒλŸ¬κ·ΈμΈμ„ μ΄μš©ν•˜μ—¬ ν•œλ°©μ— 끝낼 μ˜ˆμ •μž…λ‹ˆλ‹€.

λͺ©μ 

  • Obsidian μ—μ„œ λ©”λͺ¨ν•œ 정보λ₯Ό Blog 둜 Posting ν•˜κΈ°.
  • κ°„κ²°ν•œ workflow ꡬ성

Step 00. Posting μœ„μΉ˜

  • ./content/index.md λŠ” 메인 ν™”λ©΄
  • ./content 밑에 markdown λ¬Έμ„œ 생성.
  • ./content 밑에 static 디렉토리 λ§Œλ“€κ³  static λ¦¬μ†ŒμŠ€ 파일 μ €μž₯ ( 디렉토리 이름은 μž„μ˜λ‘œ μ •ν•˜λ©΄ 됨. )
  • markdown 파일의 ν˜•μ‹μœΌλ‘œ μ•„λž˜μ˜ frontmatter ν˜•μ‹μ„ λ„£κ³  μž‘μ„±

Step 01. Posting Template

---
title: 
draft: 
tags: 
description: 
date: ""
---

Step 02. PlugIn Install & Setting

  • plugin : shell commands

  • shell μœ„μΉ˜ / 단좕킀 μ„€μ •

Step 03. Shell Scripte

  • 볡사 κΈ°λŠ₯ zsh script 파일
    • μˆ˜μ •ν•œμ§€ 1일 μ΄λ‚΄μ˜ .md νŒŒμΌμ€‘μ— draft: false 문ꡬ κ°€μ§„ νŒŒμΌμ„ blog μœ„μΉ˜λ‘œ 볡사.
    • λ³΅μ‚¬ν•œ νŒŒμΌμ•ˆμ— jpg or jpeg 파일 이 있으면 static μœ„μΉ˜μ— 볡사
    • λ³΅μ‚¬ν•œ 파일 print
#!/bin/zsh
 
# μ ˆλŒ€ 경둜 μ‚¬μš©
SRC_PATH="/Home/MEMO"
DST_PATH="/Home/blog/content"
BLOG_PATH="/Home/blog/"
STATIC_SRC_PATH="${SRC_PATH}/Static_file"
STATIC_DST_PATH="${DST_PATH}/static"
 
# μ΄λ™λœ 파일 이름을 μ €μž₯ν•  λ°°μ—΄
moved_files=()
 
# 디렉토리 쑴재 μ—¬λΆ€ 확인
check_directories() {
    for dir in "$SRC_PATH" "$DST_PATH" "$STATIC_SRC_PATH"; do
        if [ ! -d "$dir" ]; then
            echo "Error: Directory $dir does not exist"
            exit 1
        fi
    done
}
 
 
git_push() {
	cd $BLOG_PATH
 
	# λ³€κ²½λœ 파일 λͺ©λ‘ κ°€μ Έμ˜€κΈ°
	ADDED_FILES=($(git status -s | awk '$1 == "A" {print $2}'))
	MODIFIED_FILES=($(git status -s | awk '$1 == "M" {print $2}'))
	DELETED_FILES=($(git status -s | awk '$1 == "D" {print $2}'))
 
	# λ³€κ²½λœ 파일 개수 확인
	TOTAL_FILES=$(( ${#ADDED_FILES[@]} + ${#MODIFIED_FILES[@]} + ${#DELETED_FILES[@]} ))
	if [ $TOTAL_FILES -eq 0 ]; then
	    echo "λ³€κ²½λœ 파일이 μ—†μŠ΅λ‹ˆλ‹€. Pushν•  λ‚΄μš©μ΄ μ—†μŠ΅λ‹ˆλ‹€."
	    exit 0
	fi
 
	# μ‚­μ œλœ 파일 처리 (git rm μ‹€ν–‰)
	if [ ${#DELETED_FILES[@]} -gt 0 ]; then
	    git rm "${DELETED_FILES[@]}"
	fi
 
	# 컀밋 λ©”μ‹œμ§€ ꡬ성
	COMMIT_MSG=""
 
	if [ ${#ADDED_FILES[@]} -gt 0 ]; then
	    DISPLAY_FILES="${ADDED_FILES[@]:0:5}"
	    COMMIT_MSG+="πŸ“Œ New: ${DISPLAY_FILES// /, }"
	    if [ ${#ADDED_FILES[@]} -gt 5 ]; then
		COMMIT_MSG+=" ... μ™Έ ${#ADDED_FILES[@]}개 파일"
	    fi
	    COMMIT_MSG+="\n"
	fi
 
	if [ ${#MODIFIED_FILES[@]} -gt 0 ]; then
	    DISPLAY_FILES="${MODIFIED_FILES[@]:0:5}"
	    COMMIT_MSG+="πŸ›  Update: ${DISPLAY_FILES// /, }"
	    if [ ${#MODIFIED_FILES[@]} -gt 5 ]; then
		COMMIT_MSG+=" ... μ™Έ ${#MODIFIED_FILES[@]}개 파일"
	    fi
	    COMMIT_MSG+="\n"
	fi
 
	if [ ${#DELETED_FILES[@]} -gt 0 ]; then
	    DISPLAY_FILES="${DELETED_FILES[@]:0:5}"
	    COMMIT_MSG+="πŸ—‘ Delete: ${DISPLAY_FILES// /, }"
	    if [ ${#DELETED_FILES[@]} -gt 5 ]; then
		COMMIT_MSG+=" ... μ™Έ ${#DELETED_FILES[@]}개 파일"
	    fi
	    COMMIT_MSG+="\n"
	fi
 
 
	# Git μž‘μ—… μˆ˜ν–‰
	git add .
	git commit -m "$COMMIT_MSG"
	git push
 
	echo "Push Success!"
}
 
# 디렉토리 확인 μ‹€ν–‰
check_directories
 
# ν•˜μœ„ 디렉토리 ν¬ν•¨ν•˜μ—¬ .md 파일 쀑 μˆ˜μ •/μΆ”κ°€λœ μ§€ 1일 μ΄λ‚΄μ˜ 파일 μ°ΎκΈ°
find "$SRC_PATH/" -type f -name "*.md" -mtime -1 | while read -r FILE; do
    # "draft μƒνƒœκ°€ false" 문ꡬ 포함 μ—¬λΆ€ 확인
    if grep -q "draft: false" "$FILE"; then
        # 원본 파일 κ²½λ‘œμ—μ„œ ν•˜μœ„ 디렉토리 경둜 μΆ”μΆœ
        RELATIVE_PATH="${FILE#$SRC_PATH}"
        TARGET_PATH="$DST_PATH/${RELATIVE_PATH%/*}"
 
        # λŒ€μƒ 디렉토리 생성 (μ‹€νŒ¨ μ‹œ μ—λŸ¬ 처리)
        if ! mkdir -p "$TARGET_PATH" 2>/dev/null; then
            echo "Error: Failed to create directory $TARGET_PATH"
            continue
        fi
 
        # 파일이 이미 μ‘΄μž¬ν•˜λŠ” 경우 κ²½κ³ 
        TARGET_FILE="$TARGET_PATH/${FILE##*/}"
 
        # 파일 볡사 (μ—λŸ¬ 처리 포함)
        if ! cp "$FILE" "$TARGET_FILE" 2>/dev/null; then
            echo "Error: Failed to copy $FILE to $TARGET_FILE"
            continue
        fi
 
	# jpg λ˜λŠ” jpeg 파일이 ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ 확인
	if grep -q "\.jpg\|\.jpeg" "$FILE"; then
	    # νŒŒμΌμ— μ–ΈκΈ‰λœ jpg λ˜λŠ” jpeg νŒŒμΌλ“€μ„ 검색 및 볡사
	    grep -oE "[a-zA-Z0-9_-]+\.(jpg|jpeg)" "$FILE" | while read -r IMG_FILE; do
		IMG_SOURCE="$STATIC_SRC_PATH/$IMG_FILE"
		IMG_TARGET="$STATIC_DST_PATH/$IMG_FILE"
 
		if [ -f "$IMG_SOURCE" ]; then
		    if ! mkdir -p "$STATIC_DST_PATH" 2>/dev/null; then
			echo "Error: Failed to create directory $STATIC_DST_PATH"
			continue
		    fi
 
		    if ! cp "$IMG_SOURCE" "$STATIC_DST_PATH/" 2>/dev/null; then
			echo "Error: Failed to copy $IMG_SOURCE to $STATIC_DST_PATH"
			continue
		    fi
		    moved_files+=("$IMG_FILE")
		fi
	    done
	fi
 
        # μ΄λ™λœ 파일 이름 μ €μž₯
        moved_files+=("${RELATIVE_PATH##*/}")
    fi
done
 
# μ΄λ™λœ 파일 이름 좜λ ₯
if [ ${#moved_files[@]} -gt 0 ]; then
    echo "Moved Files:"
    printf "%s\n" "${moved_files[@]}"
    echo "Total files moved: ${#moved_files[@]}"
    git_push
else
    echo "No files were moved."
    # delete file 처리
    git_push
fi
 
exit 0

Step 04. 확인

  • μ„€μ •ν•œ 단좕킀 μ‹€ν–‰ ν•˜μ—¬ μ‹€μ œ blog μœ„μΉ˜μ— 볡사 여뢀와 git μƒνƒœ 확인
-EOF-