Obsidian의 Bash 스크립트: 파일 이름을 바꾸고 앞부분 변수를 기반으로 이동하는 스크립트

Obsidian의 Bash 스크립트: 파일 이름을 바꾸고 앞부분 변수를 기반으로 이동하는 스크립트

나는 사용하고있다Obsidian의 Shell 명령 플러그인latexmkLaTeX를 통해 PDF로 변환된 Markdown 파일을 실행하여 인용을 렌더링하는 등의 작업을 수행합니다 .

이제 저는 Vault(VScode의 폴더와 매우 유사하게 열리는 Obsidian 폴더)의 파일을 frontmatter 변수를 기반으로 동일한 Vault의 다른 위치로 이동하는 명령을 만들려고 합니다. 예를 들어, 있으면 Medium: Book그것을 옮기고 Book Log, 있으면 Medium: Movie다른 곳으로 옮깁니다.

내 문제는 a) 내 구문이 올바른지 확실하지 않으며 b) 플러그인 특정 변수(예: {{file_name}})를 사용해야 한다는 사실과 플러그인이 단일 행만 처리할 수 있다는 사실 사이에서 ' 문제가 어디에 있는지 잘 모르겠습니다.

문장으로 플러그인에 넣으면 다음과 같습니다.

case {{file_name}} in 2*) : ;; *) mv {{file_path:absolute}} {{folder_path:absolute}}/{{date:YYYY-MM-DD}}\ {{file_name}} ;; esac; case {{yaml_value:Medium}} in Book | Audiobook | Podcast | eBook | GraphicNovel) mv {{file_path:absolute}}  {{vault_path}}/Book\ Log/{{date:YYYY}}/{{date:MM}}/{{file_name}} ;; Movie | TV | Game) mv {{file_path:absolute}}  {{vault_path}}/Movies\ and\ Games/{{date:YYYY}}/{{date:MM}}/{{file_name}};; esac

개행 문자가 있는 경우 다음과 같습니다.

case {{file_name}} in 
    2*) : ;; 
    *) mv {{file_path:absolute}} {{folder_path:absolute}}/{{date:YYYY-MM-DD}}\ {{file_name}} ;;  
esac; 

case {{yaml_value:Medium}} in 
Book | Audiobook | Podcast | eBook | GraphicNovel) mv {{file_path:absolute}} {{vault_path}}/Book\ Log/{{date:YYYY}}/{{date:MM}}/{{file_name}} ;; 
Movie | TV | Game) mv {{file_path:absolute}}  {{vault_path}}/Movies\ and\ Games/{{date:YYYY}}/{{date:MM}}/{{file_name}};; 

esac; exit; 

exec bash

이 스크립트의 목적은 두 가지 작업을 수행하는 것입니다. 즉, 현재 날짜로 파일 이름을 바꾸고(파일에 날짜 접두사가 아직 없는 경우) 올바른 위치로 이동하는 것입니다. 위의 현재 버전에서는 한 번에 하나씩 실행되지만 동시에 둘 다 실행되지는 않습니다. 즉, 파일이 a 이외의 다른 문자로 시작하면 2*날짜가 앞에 붙습니다. 파일에 이미 날짜가 있는 경우에만(수동으로 파일을 넣거나 처음으로 이 명령을 실행하여) 파일을 올바른 위치로 이동합니다. 이 단계가 완료되기를 바랍니다.

mv내 의심은 첫 번째 단계 이후의 단계가 어떻게든 esac두 번째 사례의 일부로 구문 분석된다는 것인데, 이를 방지하는 방법을 모르겠습니다.

어떤 제안이라도 감사하겠습니다! 감사해요:)

편집: Steeldiver의 제안을 받아들여 bash에서 직접 다시 작성해 보았지만 여전히 문제가 있습니다.

#!/bin/bash

fileName=$1
f10="${fileName:0:10}"
today=$(date +"%Y-%m-%d")
year=$(date +"%Y")
month=$(date +"%m")

if [[ $f10 != [0-9]* ]] ; then 

    if grep -E '(Book|Audiobook|Podcast|eBook|GraphicNovel)' $1 ; then

        mv $1 "/home/Documents/Obsidian/Books and Movies/Book Log/$year/$month/$today $1"

    elif grep -E '(Movie|TV|Game)' $1 ; then
        
        mv $1 "/home/Documents/Obsidian/Books and Movies/Movies and Games/$year/$month/$today $1"

    fi

elif [[ $f10 = [0-9]* ]] ; then
    
     if grep -E '(Book|Audiobook|Podcast|eBook|GraphicNovel)' $1 ; then

        mv $1 "/home/Documents/Obsidian/Books and Movies/Book Log/$year/$month/$1"

    elif grep -E '(Movie|TV|Game)' $1 ; then
        
        mv $1 "/home/Documents/Obsidian/Books and Movies/Movies and Games/$year/$month/$1"

    fi
fi

중첩으로 인해 약간 우아하지 않은 것 외에도 ( 여기서 if어떻게 사용하는지 모르겠습니다 . 다음 오류가 발생합니다.)case

bash 2.sh "2023-09-05 aaa.md" 
grep: 2023-09-05: No such file or directory
grep: aaa.md: No such file or directory
grep: 2023-09-05: No such file or directory
grep: aaa.md: No such file or directory

어떤 아이디어가 있나요?

관련 정보