Skip to main content

tar で指定ファイルで対象を絞る

Linux

パスが分かっている場合

bash
tar zxvf aaa.tar.gz path/to/the/file.txt

パスをパターンで指定したい場合

--exclude のようにワイルドカード指定ができないので、

bash
tar zxvf aaa.tar.gz $(tar ztf aaa.tar.gz | grep -E '(xxx|yyy|zzz).txt')

みたいな感じで

tar で固めるとき、指定パターンを除外

bash
tar zcvf xxx.tar.gz --exclude="*.log" --exclude="xxx/dump" xxx/

--exclude の位置に注意。いちばん後ろでは NG で、固めるディレクトリの手前に書く。 RedHat 7 → 9 辺りで挙動が変わったような(以前はエラーにならないが無視されていたが、メッセージ出すようになってくれたということか)

パターンの指定は、glob マッチ。(ただし globstar (**) 非対応)
先頭と末尾に '/' をつけない。'**' は使わない というルールにしておけば良さそう。

  • "*.log"
    • xxx/aaa/bbb/ccc.log ← 除外される
    • xxx/aaa/bbb.log ← 除外される
  • "**/*.log'
    • globstar 非対応なので期待通りにならないし、やりたいことは "*.log" で満たしているはず
  • "dump"
    • xxx/aaa/dump/ 以下 ← 除外される
    • xxx/aaa/dump-2/ ← 除外されない(期待通り)
  • "aaa/dump"
    • xxx/aaa/dump/ 以下 ← 除外される
    • xxx/bbb/dump/ ← 除外されない(期待通り)
    • xxx/tmp.aaa/dump/ ← 除外されない(期待通り。文字列マッチではないので)
    • xxx/aaa/dump-2/ ← 除外されない(期待通り)
  • "dump/"
    • xxx/aaa/dump/ 以下 ← 意図通りにならないことがある? やめとく
  • "/dump/"
    • xxx/aaa/dump/ 以下 ← 除外されない。やめとく

以下広告