tarでアーカイブ作成時に特定のディレクトリ・ファイルを除外する

tarでアーカイブを作成する際、ディレクトリを指定してその配下全てをアーカイブ化することが多いだろう。
その中で、特定のサブディレクトリのみ除外してアーカイブを作成する場合は、「--exclude」オプションもしくは「-X」オプションを付与すると良いだろう。

1.「--exclude」オプション

コマンドラインで直接PATHを指定する場合は、「--exclude」オプションを付与する。

tar cvf 作成するアーカイブファイルPATH --exclude 除外ディレクトリのPATH アーカイブ対象ディレクトリ

[root@test-centos7 ~]# find /work8 -type d
/work8
/work8/work8-1
/work8/work8-1/8-1-2
/work8/work8-1/8-1-3
/work8/work8-1/8-1-4
/work8/work8-2
/work8/work8-2/8-2-4
/work8/work8-2/8-2-2
/work8/work8-3
/work8/work8-4
/work8/work8-4/8-4-2
/work8/work8-4/8-4-1
/work8/work8-4/8-4-7
/work8/work8-5
/work8/work8-6
[root@test-centos7 ~]# tar czvf /tmp/test8.tar.gz --exclude /work8/work8-1 /work8
tar: メンバ名から先頭の `/' を取り除きます
/work8/
/work8/work8-2/
/work8/work8-2/8-2-4/
/work8/work8-2/8-2-2/
/work8/work8-3/
/work8/work8-4/
/work8/work8-4/8-4-2/
/work8/work8-4/8-4-1/
/work8/work8-4/8-4-7/
/work8/work8-5/
/work8/work8-6/

なお、複数ディレクトリを除外する場合は「--exclude」を別途記述して指定する必要がある。

[root@test-centos7 ~]# tar czvf /tmp/test8.tar.gz --exclude /work8/work8-1 --exclude /work8/work8-2 /work8
tar: メンバ名から先頭の `/' を取り除きます
/work8/
/work8/work8-3/
/work8/work8-4/
/work8/work8-4/8-4-2/
/work8/work8-4/8-4-1/
/work8/work8-4/8-4-7/
/work8/work8-5/
/work8/work8-6/

2.「-X」オプション

「-X」オプションを使用すると、ファイルに記述されているPATHを除外してアーカイブファイルを作成することが出来る。

tar cvf 作成するアーカイブファイルPATH -X 除外ディレクトリのPATHを書いたファイル アーカイブ対象ディレクトリ

[root@test-centos7 ~]# cat /tmp/work8.list
/work8/work8-4
/work8/work8-5

[root@test-centos7 ~]# tar czvf /tmp/test8.tar.gz -X /tmp/work8.list /work8
tar: メンバ名から先頭の `/' を取り除きます
/work8/
/work8/work8-1/
/work8/work8-1/8-1-2/
/work8/work8-1/8-1-3/
/work8/work8-1/8-1-4/
/work8/work8-2/
/work8/work8-2/8-2-4/
/work8/work8-2/8-2-2/
/work8/work8-3/
/work8/work8-6/