使っていますObsidianのShellコマンドプラグインlatexmk
LaTeXを介してPDFに変換されたMarkdownファイルを実行して引用符をレンダリングするなどの操作を実行します。
私はVault(VScodeのフォルダとよく似ているObsidianフォルダ)のファイルをfrontmatter変数に基づいて同じVaultの別の場所に移動するコマンドを作成しようとしています。たとえば、あればMedium: Book
それを移動しBook Log
、あればMedium: Movie
別の場所に移動します。
私の問題は、a)私の構文が正しいかどうかはわかり{{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
このスクリプトの目的は、2つのことを行うことです。つまり、現在の日付にファイル名を変更し(ファイルに日付プレフィックスがまだない場合)、正しい場所に移動します。上記の現在のバージョンでは、一度に1つずつ実行されますが、同時に両方は実行されません。つまり、ファイルがa以外の文字で始まる場合は、2*
日付が前に付けられます。ファイルにすでに日付がある場合にのみ(手動でファイルを挿入するか、最初にこのコマンドを実行して)、ファイルを正しい場所に移動します。このステップが完了することを願っています。
mv
私の疑いは、最初のステップの後のステップが何とかesac
2番目のケースの一部として解析されることです。これを防ぐ方法がわかりません。
どんな提案にも感謝します!ありがとうございます:)
編集: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
どんなアイデアがありますか?