Macで複数ファイルを同時に開くスクリプトを書く
Macで複数フォルダに保存された5〜6個くらいのエクセルファイルを同時に開くことを月に数度やっている。
Finderからフォルダを開いてファイルをクリックで開くのを繰り返して実現しているのだが、1分以内には終わるけど少々面倒さがある。

フォルダとファイルの命名規則は決めており、スクリプト化することにした。
うっすらと、Automator、AppleScriptかなと考えていたけど、シェルスクリプトでできそう。
ルールは
YYYY(西暦4桁)>フォルダ名>YYYYMM_ファイル名.xlsx
という感じで、年次でフォルダ月次でファイルが増えていく。
単純化すると下記のような感じ
2026>A>202601_A_報告書.xlsx
>202602_A_報告書.xlsx
>202603_A_報告書.xlsx
….
>202607_A_報告書.xlsx
>202608_A_報告書.xlsx
….
2026>B>202601_B_報告書.xlsx
>202602_B_報告書.xlsx
>202603_B_報告書.xlsx
….
>202607_B_報告書.xlsx
>202608_B_報告書.xlsx
….
2026>C>202601_C_報告書.xlsx
>202602_C_報告書.xlsx
>202603_C_報告書.xlsx
….
>202607_C_報告書.xlsx
>202608_C_報告書.xlsx
….
A、B、Cは案件名だったり顧客名だったりして、5〜6個ある。
それぞれのフォルダ下の同じ年月のファイルを同時に開きたい。
以下はコード
#!/bin/bash
# 第一引数:年を指定 例)2026
# 指定がない場合は実行時の年
# 第二引数:月を指定 例)07または7
# 指定がない場合は実行時の月
if [[ -z "$1" ]]; then
# 引数指定なし
yyyy=$(date +%Y)
elif [[ "$1" =~ ^[0-9]{4}$ ]]; then
# 引数で指定
yyyy="$1"
else
echo "エラー: 第1引数は4桁の西暦を指定してください。"
exit 1
fi
if [[ -z "$2" ]]; then
mm=$(date +%m)
elif [[ "$2" =~ ^(0?[1-9]|1[0-2])$ ]]; then
mm=$(printf "%02d" "$2")
else
echo "エラー: 第2引数は1~12の月を指定してください。"
exit 1
fi
echo ${yyyy}
echo ${mm}
yyyymm=${yyyy}${mm}
open <path>/${yyyy}/A/${yyyymm}_A_報告書.xlsx
open <path>/${yyyy}/B/${yyyymm}_B_報告書.xlsx
open <path>/${yyyy}/C/${yyyymm}_C_報告書.xlsx
引数で年と月を受け取ることにした。
ただし引数指定がなければ実行時の年月を使うことにした。
引数の月は7でも07でも、つまり一桁で強いていしても二桁で指定してもOKにした。それ以外の桁数や数字以外の指定は正規表現で判定してエラーにした。
こんなに単純なプログラムでも、業務効率化できるのは嬉しい。
