(Linux)特定ファイル以外をtarball(tarボール)にする

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

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

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

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

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

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

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

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

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

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

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

takk~$ cmp t.tar t2.tar

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

関連記事はコチラ
https://life-is-command.com/linux-command-beginner/

コメント

タイトルとURLをコピーしました