ObsidianのBashスクリプト:ファイル名を変更し、前の変数に基づいて移動するスクリプト

ObsidianのBashスクリプト:ファイル名を変更し、前の変数に基づいて移動するスクリプト

使っていますObsidianのShellコマンドプラグインlatexmkLaTeXを介して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私の疑いは、最初のステップの後のステップが何とかesac2番目のケースの一部として解析されることです。これを防ぐ方法がわかりません。

どんな提案にも感謝します!ありがとうございます:)

編集: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

どんなアイデアがありますか?

ベストアンサー1

おすすめ記事