カレントディレクトリに以下のようなファイルがあるとき、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/
コメント