tarコマンドで複数ディレクトリを個別に一括圧縮する方法(lsとxargsを使用)

tarコマンドで複数ディレクトリを個別に一括圧縮する方法

Photo Ben White via Unsplash

私はエックスサーバーで複数サイトを運用しています。エックスサーバーには自動バックアップ機能がありますが、念のため、自分でもputtyを使って定期的にSSHで接続してtarコマンドでバックアップを取るようにしています。

tarコマンドを使って、圧縮ファイルを作成する方法、複数サイトを対象にサイトごとの圧縮ファイルを作成しながら一括で処理する方法を紹介します。

tarコマンドで圧縮ファイルを作成する方法

tarコマンドで個別に圧縮ファイルを作成する場合、次のようになります。

tar czvf (作成する圧縮ファイル名) (圧縮対象ディレクトリ)
tar czvf backup.tar.gz .
  • c:書庫を作成する(tarファイルを作る)
  • z:gzipを通し処理する
  • v:処理したファイルの一覧を表示する(verbose)
  • f:指定したファイル名を使用する

最後の「.」は現在のディレクトリ以下すべてを対象にするという意味です。「www」など、ディレクトリ名を指定すれば、そのディレクトリのみ対象となります。

tarコマンドでディレクトリごとの圧縮ファイルを一括で作成する方法

サイト数が少ない場合は先ほど紹介した圧縮ファイル作成コマンドを数回繰り返せば良いのですが、運営サイトが増えてくるとそれなりに手間になります。

そこで、tarコマンドで複数のディレクトリを対象に、それぞれを個別に圧縮しながら、一括で処理したいと思います。コマンドは次のようになります。

ls -d (圧縮対象ディレクトリのパターン) | xargs -n1 -i tar cvzfh {}.tar.gz {}
ls -d *.com | xargs -n1 -i tar cvzfh {}.tar.gz {}

「~.com」に該当するディレクトリをバックアップ対象にしています。

例えば、

wp-benricho.com
hogehoge.com
text.com
test.jp

という4つのディレクトリがある場合、「test.jp」以外の3つのディレクトリが「~.com」のパターンに該当するので、

wp-benricho.com.tar.gz
hogehoge.com.tar.gz
text.com.tar.gz

という圧縮ファイルが作成されます。

ワイルド・カードの使い方

圧縮対象ディレクトリのパターンの部分には、次のようなワイルドカードが使えます。

ワイルドカード 解説
? 任意の1文字。ただし,ドット・ファイルのドット「.」は除く
* 0文字以上の文字列。ただし,ドット・ファイルのドット「.」は除く
[] [ ]内の任意の1文字。ハイフン「-」により文字範囲を指定できる
{} { }内の任意の文字列。文字列はカンマ「,」により複数列挙できる

[ ]は次のように文字範囲を指定できます。

ワイルドカード 解説
[0-9] 数字
[a-z] 小文字アルファベット
[A-Z] 大文字アルファベット
[0-9a-zA-Z] 数字,アルファベット

ワイルドカードは、例えば、次のような使い方ができます。

ワイルドカード 解説
*.com .comで終わるファイル・ディレクトリ
test* testではじまるファイル・ディレクトリ
[0-9]* 数字ではじまるファイル・ディレクトリ