tarコマンドを使って「一部のファイルやディレクトリを除外」してアーカイブファイルの作成と展開を行う方法を、例を用いて解説します。
一部のファイルを除外してtarアーカイブを作成する
tarコマンドに「–exclude パターン」を指定することで、ファイルを処理対象から除外できます。
「パターン」には、ファイル名やディレクトリ名を指定します。「*」「?」「[…]」といったワイルドカードを用いて指定することもできます。
例えば、カレントディレクトリに以下のような構成の「tar-test」ディレクトリがあるとします。
$ tree tar-test/
tar-test/
├── test_1
│ ├── test_1
│ │ ├── test_1.txt
│ │ ├── test_2.txt
│ │ └── test_x.txt
│ ├── test_2
│ │ ├── test_1.txt
│ │ ├── test_2.txt
│ │ └── test_x.txt
│ └── test_x
│ ├── test_1.txt
│ ├── test_2.txt
│ └── test_x.txt
├── test_2
│ ├── test_1
│ │ ├── test_1.txt
│ │ ├── test_2.txt
│ │ └── test_x.txt
│ ├── test_2
│ │ ├── test_1.txt
│ │ ├── test_2.txt
│ │ └── test_x.txt
│ └── test_x
│ ├── test_1.txt
│ ├── test_2.txt
│ └── test_x.txt
└── test_x
├── test_1
│ ├── test_1.txt
│ ├── test_2.txt
│ └── test_x.txt
├── test_2
│ ├── test_1.txt
│ ├── test_2.txt
│ └── test_x.txt
└── test_x
├── test_1.txt
├── test_2.txt
└── test_x.txt
12 directories, 27 files
以下のコマンドで、これらのディレクトリやファイルすべてを「/tmp/tar-test.tar.gz」にアーカイブできます。
$ tar -zcvf /tmp/tar-test.tar.gz tar-test/
次の例のように、「–exclude test_2」を加えて実行すると、名前が「test_2」に一致するファイルやディレクトリを除外してtarアーカイブを作成できます。
$ tar --exclude test_2 -zcvf /tmp/test.tar.gz tar-test/
tar-test/
tar-test/test_x/
tar-test/test_x/test_x/
tar-test/test_x/test_x/test_2.txt
tar-test/test_x/test_x/test_1.txt
tar-test/test_x/test_x/test_x.txt
tar-test/test_x/test_1/
tar-test/test_x/test_1/test_2.txt
tar-test/test_x/test_1/test_1.txt
tar-test/test_x/test_1/test_x.txt
tar-test/test_1/
tar-test/test_1/test_x/
tar-test/test_1/test_x/test_2.txt
tar-test/test_1/test_x/test_1.txt
tar-test/test_1/test_x/test_x.txt
tar-test/test_1/test_1/
tar-test/test_1/test_1/test_2.txt
tar-test/test_1/test_1/test_1.txt
tar-test/test_1/test_1/test_x.txt
このように、「tar-test/test_2/」「tar-test/test_1/test_2/」「tar-test/test_x/test_2/」ディレクトリ以下が除外されます。なお、各ディレクトリにある「test_2.txt」は除外されていません。
次の例のように、「–exclude “test_2*”」と指定すると、名前が「test_2*」に一致するファイルやディレクトリを除外してtarアーカイブを作成できます。
$ tar --exclude "test_2*" -zcvf /tmp/test.tar.gz tar-test/
tar-test/
tar-test/test_x/
tar-test/test_x/test_x/
tar-test/test_x/test_x/test_1.txt
tar-test/test_x/test_x/test_x.txt
tar-test/test_x/test_1/
tar-test/test_x/test_1/test_1.txt
tar-test/test_x/test_1/test_x.txt
tar-test/test_1/
tar-test/test_1/test_x/
tar-test/test_1/test_x/test_1.txt
tar-test/test_1/test_x/test_x.txt
tar-test/test_1/test_1/
tar-test/test_1/test_1/test_1.txt
tar-test/test_1/test_1/test_x.txt
このように指定することで、「test_2.txt」も除外されます。
次の例のように、「–exclude “test_[12]*”」と指定すると、名前が「test_[12]*」に一致するファイルやディレクトリを除外してtarアーカイブを作成できます。
$ tar --exclude "test_[12]*" -zcvf /tmp/test.tar.gz tar-test/
tar-test/
tar-test/test_x/
tar-test/test_x/test_x/
tar-test/test_x/test_x/test_x.txt
このように、名前が「test_1」および「test_2」で始まるファイルやディレクトリがすべて除外されました。
次の例のように「–exclude」を複数指定することもできます。
$ tar --exclude "test_1/test_*/test_[12]*" --exclude "test_x/test_*/test_x*" -zcvf /tmp/test.tar.gz tar-test/
tar-test/
tar-test/test_2/
tar-test/test_2/test_2/
tar-test/test_2/test_2/test_2.txt
tar-test/test_2/test_2/test_1.txt
tar-test/test_2/test_2/test_x.txt
tar-test/test_2/test_x/
tar-test/test_2/test_x/test_2.txt
tar-test/test_2/test_x/test_1.txt
tar-test/test_2/test_x/test_x.txt
tar-test/test_2/test_1/
tar-test/test_2/test_1/test_2.txt
tar-test/test_2/test_1/test_1.txt
tar-test/test_2/test_1/test_x.txt
tar-test/test_x/
tar-test/test_x/test_2/
tar-test/test_x/test_2/test_2.txt
tar-test/test_x/test_2/test_1.txt
tar-test/test_x/test_x/
tar-test/test_x/test_x/test_2.txt
tar-test/test_x/test_x/test_1.txt
tar-test/test_x/test_1/
tar-test/test_x/test_1/test_2.txt
tar-test/test_x/test_1/test_1.txt
tar-test/test_1/
tar-test/test_1/test_2/
tar-test/test_1/test_2/test_x.txt
tar-test/test_1/test_x/
tar-test/test_1/test_x/test_x.txt
tar-test/test_1/test_1/
tar-test/test_1/test_1/test_x.txt
一部のファイルを除外してtarアーカイブを展開する
アーカイブファイルの作成時と同じように、展開時にも「–exclude」オプションを用いることができます。
指定方法は、アーカイブファイルを作成する場合と同様です。以下の例では、「test_2.txt」を除外しています。
$ tar --exclude test_2.txt -zxvf /tmp/tar-test.tar.gz
tar-test/
tar-test/test_2/
tar-test/test_2/test_2/
tar-test/test_2/test_2/test_1.txt
tar-test/test_2/test_2/test_x.txt
tar-test/test_2/test_x/
tar-test/test_2/test_x/test_1.txt
tar-test/test_2/test_x/test_x.txt
tar-test/test_2/test_1/
tar-test/test_2/test_1/test_1.txt
tar-test/test_2/test_1/test_x.txt
tar-test/test_x/
tar-test/test_x/test_2/
tar-test/test_x/test_2/test_1.txt
tar-test/test_x/test_2/test_x.txt
tar-test/test_x/test_x/
tar-test/test_x/test_x/test_1.txt
tar-test/test_x/test_x/test_x.txt
tar-test/test_x/test_1/
tar-test/test_x/test_1/test_1.txt
tar-test/test_x/test_1/test_x.txt
tar-test/test_1/
tar-test/test_1/test_2/
tar-test/test_1/test_2/test_1.txt
tar-test/test_1/test_2/test_x.txt
tar-test/test_1/test_x/
tar-test/test_1/test_x/test_1.txt
tar-test/test_1/test_x/test_x.txt
tar-test/test_1/test_1/
tar-test/test_1/test_1/test_1.txt
tar-test/test_1/test_1/test_x.txt
コメント