• ベストアンサー

フィルタをかけて圧縮

test フォルダの中身で、特定のディレクトリ・ファイルを除いた全てのをファイル群を test.tar.gz に圧縮したいのですが pipe等を使ったりして一発で圧縮するよい方法はないでしょうか? (例) testディレクトリの圧縮。ただし以下のファイルを除く(*は任意のファイル)。 test/zyogai/* 知恵をお貸しください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

GNU tar で bzip2 で圧縮された tar ファイルを作る場合はこれでできます。(GNU tar は有名な Linux ディストリビューションならデフォルトでインストールされている tar コマンドです)。 tar c --exclude test/zyogai -jf test.tar.gz2 test 全部長い型式のオプションで書くとこうです。 tar --create --exclude='test/zyogai' --bzip2 --file test.tar.gz2 test test/zyogai/ というディレクトリは含めるけどその下のファイルは含めたくないという場合は --exclude='test/zyogai/*' にすればできます。 何らかの事情で tar コマンドが GNU tar ではなく、--exclude に該当するオプションがないという場合は find を使ってファイル名を抜き出して除外したファイル名のリストを作って指定すればいいと思います。 例 tar cf - `find test -type f -print | grep -v '^test/zyogai/'` | bzip2 >test.tar.bz2 但し GNU tar の -T オプションに該当するオプションがあるのならこんな風にも書けます。(-T - の部分は標準入力からファイル名を読むという意味です。中間ファイルを作って2段階でやってもいいです)。 find test -type f -print | grep -v '^test/zyogai/' | tar c -T - -f - | bzip2 >test.tar.gz2

参考URL:
http://www.linux.or.jp/JM/html/GNU_tar/man1/tar.1.html

その他の回答 (1)

  • __orz
  • ベストアンサー率44% (12/27)
回答No.1

% ls test | grep -v 'test/zyogai/' | xargs tar czf test.tar.gz とかでどうでしょうか。 # 微調整が必要かもしれません % ls test | grep -v 'test/zyogai/' で出力を確認してみて、良さそうなら、大丈夫だと思いますが。 余談ですが、 zsh とか使っていると、もう少し違う方法もありますが。 そういうの興味があれば、zshお勧めです。