読者です 読者をやめる 読者になる 読者になる

しふみんのブログ

しふみんのブログです。

Kobitoのデータをバックアップするシェルスクリプト

はじめに

ドットインストールのシェルスクリプト入門を見たので、せっかくだから勉強がてら何かを書こうと思い、Kobitoのデータをバックアップするシェルスクリプトを書きました。

環境

前提

Kobitoのデータ

Kobitoのデータは、 ~/Library/Containers/com.qiita.Kobito/Data/Library/Kobito にある

  • Kobito.db
  • Kobito.db-shm
  • Kobito.db-wal
  • Kobito.db.xxxxxxx.bak

の3つ(4つ)。

Kobitoのデータの保存は、

  • Kobitoを終了する
  • メニュー - アイテム - 保存 を選択する

の2つの時にされるっぽい。

スクリプト

コード

#!/bin/bash

# データをバックアップするディレクトリ
backup_dir_path=~/Dropbox/project/Kobito
# Kobitoの元データ保存されているディレクトリ
data_dir_path=~/Library/Containers/com.qiita.Kobito/Data/Library/Kobito

# バックアップディレクトリの作成
if [ ! -e $backup_dir_path ]; then
  mkdir -p $backup_dir_path
fi

# バックアップファイルネームの作成
date=`date +"%Y%m%d"`
db_filename=Kobito.db.$date.bak
db_shm_filename=Kobito.db-shm.$date.bak
db_wal_filename=Kobito.db-wal.$date.bak

# バックアップ処理
echo "バックアップディレクトリは $backup_dir_path です"

cp -p $data_dir_path/Kobito.db $backup_dir_path/$db_filename && echo "Kobito.db  $db_filename としてバックアップしました"

cp -p $data_dir_path/Kobito.db-shm $backup_dir_path/$db_shm_filename && echo "Kobito.db-shm  $db_shm_filename としてバックアップしました"

cp -p $data_dir_path/Kobito.db-wal $backup_dir_path/$db_wal_filename && echo "Kobito.db-wal  $db_wal_filename としてバックアップしました"

説明

4-7行目:ディレクトリの指定

backup_dir_pathにバックアップを作成するディレクトリを指定する。 上のコードは、"~/Dropbox/project/Kobito"ディレクトリを指定している。

9-12行目:バックアップディレクトリの作成

バックアップを作成するディレクトリが存在しなければ作る。

14-18行目:バックアップファイルネームの作成

バックアップファイルネームはそれぞれ、"(元のファイルネーム)YYYYMMDD.bak"。 例えば、Kobito.dbを2015年7月16日にバックアップすると、"Kobito.db.20150716.bak"という名前になる。

20-27行目:バックアップ処理

ファイルのバックアップに成功すると、バックアップした旨を表示する。

実行

$ chmod 744 backup_kobito.sh
$ ./backup_kobito.sh
Kobito.db を Kobito.db.20150716.bak としてバックアップしました                           
Kobito.db-shm を Kobito.db-shm.20150716.bak としてバックアップしました                   
Kobito.db-wal を Kobito.db-wal.20150716.bak としてバックアップしました
$ ls ~/Dropbox/project/Kobito
Kobito.db-shm.20150716.bak
Kobito.db-wal.20150716.bak
Kobito.db.20150716.bak

以上

すでに同名バックアップファイルが存在した時の上書き処理があった方がいいんだろうけど、どういう処理がベストなのかよくわからない……