特定ファイル以外をtarボールにする

カレントディレクトリに以下のようなファイルがあるとき、a.out以外をtarボールにするには、どのようにコマンドを組み立てればよいでしょうか。

~$ ls
Makefile  README  a.out  main.c  main.h  sub.c  sub.h
~$

方法はたくさんありますが、まずはlsで必要なファイルだけをフィルタする方法を使いたいと思います。
lsコマンドの -Iオプションを使えば、指定したファイルを除くことができるので、これを使ってa.out以外を取得します。
その結果をxargsへ渡し、tarコマンドの引数にしてみます。

~$ ls -Ia.out | xargs tar cf t.tar

できました。tar tfで、tarボールを確認してみます。tarの展開をせずに、一覧のみをを取得したい場合はtar tfコマンドを使います。

~$ tar tf t.tar
Makefile
README
main.c
main.h
sub.c
sub.h
~$ 

ちゃんとa.outのみが除外されて書庫になっていますね。
lsの-Iオプションは、Ignore(無視する)の意味です。

次は、lsを使わずにファイルの除外をしてみます。lsだけでなくxargsも不要です。
tarコマンドにはファイルを除外する–excludeオプションがありますので、これを使いますが、先ほど新たにt.tarファイルができていますので、これもa.outと同様に除外します。

~$ tar cf t2.tar --exclude={a.out,t.tar} *
~$ tar tf t2.tar
Makefile
README
main.c
main.h
sub.c
sub.h
~$

a.outとt.tarが除外されてt2.tarという書庫ができました。
tarの–excludeオプションは、exclude(除外する)の意味です。除外するファイルが2つありましたので、{,}で括って指定をしています。

さて、これらの結果は同じになったのでしょうか。
t.tarとt2.tarを比べてみましょう。比較にはcmp(1Byte毎の比較を行う)を使いました。

~$ cmp t.tar t2.tar

一致しました。
結果が何も表示されない=一致したという意味になります。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA