나는 사용하고있다Obsidian의 Shell 명령 플러그인latexmk
LaTeX를 통해 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
어떤 아이디어가 있나요?