やまものブログ

メモ書きブログです (^_^;A

カレンダー出力 .ics ファイルをざっくり検索(自己責任です)

Googleカレンダーをエクスポートすると
  <アカウント名>@gmail.com.ical.zip
というファイルがダウンロードされます。

これを unzip で解凍すると
  <アカウント名>@gmail.com.ics
というファイルが得られました。

file コマンドで調べると
  vCalendar calendar file
という、よく見かけるファイル形式でした。

カレンダー機能のあるアプリで読みこめば内容を確認できそうです
しかし、手持ちのアプリが既に使用中なので、これを読み込んで内容を壊すリスクは冒したくない。そもそも、バックアップのためにファイルをとっておきたいだけで、それにあたって、内容を大雑把に確認したいのが目的でした。あるいは、新しいアプリを入れてみるのも堅実ですが、慣れないアプリをいじるのは面倒くさい

ということで、vCalendar ファイルがテキストであることに着目しました。
キーワードだけ grep で切り出したら大雑把な確認くらいはできそう
で、行き着いたのが以下のキーワードでの検索です。
grep -e 'DTSTART;VALUE' -e 'RRULE:FREQ' -e SUMMARY <icsファイル> | grep -v -e 'SUMMARY:Alarm notification' | less

各キーワードの意味はおそらく以下のようになっていると見受けられました。
  •  DTSTART;VALUE → 予定の開始日
  •  RRULE:FREQ  → 予定が繰り返しであることを示す (YEARLY,MONTHY,など)
  •  SUMMARY → 予定のタイトル
  •  SUMMARY:Alarm notification → 意味不明(grep -v で無視)

さらに、内容をもう少し確認しやすいように、perl と sort を使って、開始日・繰り返し・タイトルを一行にまとめて、開始日の昇順で並べてみました。

perl -ne 's/\r//; if(/DTSTART;VALUE=DATE:(\d+)/){$d=$1} if(/RRULE:FREQ=(\w+)/){$f=$1} if(/SUMMARY:(.*)$/){if($1!~/Alarm notification/){print "$d $f\t$1\n"; $f=""}}' <icsファイル> | sort -n -k 1 | less

これで概ね必要な情報が含まれているのを確認できました
繰り返しの予定を開始日でしか確認できないのは、ちょっと悔やしいけど仕方ない


最後に免責事項です。
まず、カレンダーで入力している項目が私とは異なる場合、上記のキーワードによる検索では不十分なことは明白です。さらに、自分は vCalendar も素人なので、何らかの見落としもあるかもしれません。ics ファイルの内容を確実に確認したい場合は、vCalendar に対応するアプリの導入が必要だと思います