2012年12月8日土曜日

tarのexcludeオプションにハマった


Linuxがつくづく手放せない @snicker_jp です。

アーカイブに含めない、ファイル、ディレクトリのパターンを指定する「exclude」オプションですが、なかなか詳しく載っているサイトがなかったので、書き残します。


もくじ


前提条件


  • Linux
  • GNU tar

ssh経由でtarを取ってバックアップ!なんてよくやったりしますよね。

こんな感じ。↓

1
ssh root@[サーバー] "tar --one-file-system --sparse -C / -zcf - . "  > backup.tar.gz

除外を入れると、こんな感じ。↓

1
ssh root@[サーバー] "tar --one-file-system --sparse -C / --exclude 'gomi/kore' -zcf - . "  > backup.tar.gz

複数指定したくなります。

ダメ

ssh root@[サーバー] "tar --one-file-system --sparse -C / --exclude 'gomi/kore' 'gomi/koremo' -zcf - . "  > backup.tar.gz
↑これは使えません。

OK

1
ssh root@[サーバー] "tar --one-file-system --sparse -C / --exclude 'gomi/kore' --exclude 'gomi/koremo' -zcf - . "  > backup.tar.gz
こうしないと、いけません。「--exclude」を除外したい分だけ書きます。

応用編(シェルスクリプト)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#対象ホストIPとか
IP_ADDRESS="[サーバー] "
 
# 除外したいもの(複数)
EXCLUDES=" \
  './home/hoge/Trash/*' \
  './home/huga/bigdata_tmp.*' \
  './var/tmp' \
  "
# -----------------------------------------------------------------------------
#   function
# -----------------------------------------------------------------------------
 
# メイン
#
 
function main() {
 
    local excludes=""
    local exclude=""
    for exclude in ${EXCLUDES}
    do
        excludes="${excludes} --exclude ${exclude}"
    done
 
    ssh root@${IP_ADDRESS} "tar --one-file-system --sparse -C / ${excludes} -zcf - . "  > backup.tar.gz
}

これで、いくつも書かなくて済みます!w

オプション(-X, --exclude-from=file)

tar zcf hogehoge.tar.gz hoge --exclude-from=【FILE】
のように書いて、【FILE】に書かれたファイル および ディレクトリ一覧を除外します。

1
2
3
./workspace
*-log/build-log
exlude-file
などとすれば、「"(ダブルクオーテーション)」なしで正規表現が通りました!

(」・ω・)」うー!(/・ω・)/にゃー!

共有

Clip to Evernote
0follow