tarコマンドでmacOSのバックアップする方法
この記事ではtarコマンドを使ってmacOSのバックアップ管理を行う方法を解説いたします。
はじめに
macOSのバックアップにはTime Machineを使うのが一般的ですが、別途にTime Machine用のコンピューターを用意したりと面倒です。そこでtarコマンドを使うと便利です。tarコマンドは指定したディレクトリを一つのアーカイブにまとめてくれるシェルコマンドです。gzipやtar.bz2といった圧縮も行ってくれます。また、指定したディレクトリや拡張子を除外してアーカイブすることも簡単です。私は定期的にmacOSの中の重要なフォルダを、tarコマンドを使って圧縮しUSBメモリに保存することでバックアップしてます。最小限で必要なファイルのみをバックアップしてるので、圧縮しても20GBにも満たない程度です。ですから比較的短時間でバックアップ作業は終わります。シンプルなので精神衛生上も安心できます。
tarで指定ファイル・ディレクトリを除外してtar.bz2で圧縮する方法
それでは、tarでmacOSの指定ファイル・ディレクトリを除外して、tar.bz2で圧縮する方法をご紹介いたします。ズバリ次のコマンドを使ってます。
$ tar --exclude "[Bb]uild" --exclude "html" --exclude "Pods" --exclude ".git" --exclude ".gradle" --exclude "*.apk" --exclude "*.aab" --exclude "*.mp4" --exclude "*.avi" -vcjf projects_bk.tar.bz2 Projects
実行すると、カレントディレクトリにあるProjectsディレクトリを projects_bk.tar.bz2 というファイル名でアーカイブされます。
tarのバージョン
私の環境下でのtarのバージョンは次のとおりです。
$ tar --version
bsdtar 3.5.3 - libarchive 3.5.3 zlib/1.2.11 liblzma/5.0.5 bz2lib/1.0.8
--excludeオプション
--exclude で指定したディレクトリ名や、ファイル名は除外されます。正規表現のワイルドカードなどが使えます。私はプログラミングをよく行うので、Buildしたり、Gitを使ったりします。それらは比較的大きな容量になってしまいますので、バックアップ対象からは除外させてます。ソースコードや文章ファイルなどが生きていれば、後からなんとかなりますので、そういったものは大切にバックアップするようにします。-vcjfオプション
-vcjfオプションですが、まず、cvfは次の意味になります。
記号 | 意味 |
---|---|
c | 新規作成(圧縮)する |
v | 処理したファイルを標準出力する |
f | 指定したファイル名でアーカイブ |
そしてjオプションは次のとおり圧縮形式を表します。
記号 | 意味 |
---|---|
j | bzip2を通して圧縮 |
z | gzipを通して圧縮 |
J | xz compressを通して圧縮 |
対象ディレクトリを指定する際の注意点
アーカイブしたい対象ディレクトリを指定する際に、絶対パスで指定しないようにしてください。 展開するときも絶対パスで展開されてしまい、既存のディレクトリが消滅してしまう恐れがあるからです。 この問題の解決方法として、対象ディレクトリの親ディレクトリまで移動してから相対パスでアーカイブするようにします。
バックアップシェルスクリプトの例
たとえば、次のようなアーカイブを行うシェルスクリプト作って、cronなどに登録して定期的にバックアップ処理すると便利でしょう。このシェルスクリプトでは、アーカイブファイルをUSBメモリなどに移動する処理までは書いてませんので、ご注意ください。
#!/bin/bash
DIR1='memo'
DIR2='Documents'
DIR3='Projects'
BKFILE1='memo_bk.tar.bz2'
BKFILE2='document_bk.tar.bz2'
BKFILE3='projects_bk.tar.bz2'
cd ~/
pwd
# 絶対パスでアーカイブしてはダメ!っ絶対に!->展開するときも絶対パスで展開されてしまう!!!
# ディレクトリを移動してから相対パスでアーカイブすること!!!
tar --exclude "[Bb]uild" --exclude "html" --exclude "Pods" --exclude ".git" --exclude ".gradle" --exclude "*.apk" --exclude "*.aab" --exclude "*.mp4" --exclude "*.avi" -vcjf ${BKFILE1} ${DIR1}
tar --exclude "[Bb]uild" --exclude "html" --exclude "Pods" --exclude ".git" --exclude ".gradle" --exclude "*.apk" --exclude "*.aab" --exclude "*.mp4" --exclude "*.avi" -vcjf ${BKFILE2} ${DIR2}
tar --exclude "[Bb]uild" --exclude "html" --exclude "Pods" --exclude ".git" --exclude ".gradle" --exclude "*.apk" --exclude "*.aab" --exclude "*.mp4" --exclude "*.avi" -vcjf ${BKFILE3} ${DIR3}
アーカイブ(tar.bz2)を解凍する方法
実際にアーカイブされたバックアップファイルを解凍するにはどうすれば良いでしょうか? tar コマンドのオプションを使って解凍することも可能ですが、macOSならFinderから tar.bz2 ファイルをダブルクリックすることで解凍できます。万が一同じディレクトリ名が存在していたら、サフィックスを自動で付けて上書きしないよう安全に解凍してくれます。
さいごに
現在私は、この記事を執筆しながらバックアップファイルを新しいMac環境へ展開中です。2017年モデルのMacBook Proから2022モデルのMacBook Airへ乗り換えました。はじめてのM2コアですが、消費電力も少なくサクサク動いて快適です!どちらのMacのSSD容量も256GBです。これでアプリ開発やプログラミング、サイト制作してます。容量が少ないように思われますが、定期的にキャッシュを削除したり、動画や音楽などメディアファイルはクラウド上、またはUSBメモリへ移動させるようにしているので問題ないです。広い物置があると、モノを溜め込みすぎて管理することが大変になるのと同じです。使わないものは手元にできるだけ置かないようにすることで、バックアップ対象も最小限に抑えることができるはずです。