LoginSignup
1
1

More than 3 years have passed since last update.

tar の --transform オプションは有能

Posted at

TL;DR

  • パスを正規表現で置換すればいかようにも展開できる
  • Dockerのファイル展開とか一行でシュッと書けて楽になるよ

Examples

説明のためのhoge.tar.gzの中身

$ tar ztf hoge.tar.gz
hoge/
hoge/dist/
hoge/dist/index.html
hoge/dist/index.js
hoge/LICENSE
hoge/README.md
hoge/src/
hoge/src/include/
hoge/src/include/util.h
hoge/src/main.cpp
hoge/src/main.h

  • hoge/無しに直接展開したい。--strip-components=1 と等価。
    • EXPRESSION末尾のxで正規表現を指定できる。
$ tar zxvf hoge.tar.gz --transform="s,^[^/]+/,,x" --show-transformed-names
hoge/
dist/
dist/index.html
dist/index.js
LICENSE
README.md
src/
src/include/
src/include/util.h
src/main.cpp
src/main.h
  • hoge/ではなくhuga/がいい。ルートディレクトリ名の変更
$ tar zxvf hoge.tar.gz --transform="s,^[^/]+,huga,x" --show-transformed-names
huga/
huga/dist/
huga/dist/index.html
huga/dist/index.js
huga/LICENSE
huga/README.md
huga/src/
huga/src/include/
huga/src/include/util.h
huga/src/main.cpp
huga/src/main.h
  • .hは.hppに、.htmlは.htmに変えよう。;で複数の変換を並べる。
$ tar zxvf hoge.tar.gz --transform="s,\.h$,.hpp,x;s,\.html$,.htm,x" --show-transformed-names
hoge/
hoge/dist/
hoge/dist/index.htm
hoge/dist/index.js
hoge/LICENSE
hoge/README.md
hoge/src/
hoge/src/include/
hoge/src/include/util.hpp
hoge/src/main.cpp
hoge/src/main.hpp

  • .hや.cppは捨てよう。/dev/nullの活用。
tar zxvf hoge.tar.gz --transform="s,.*\.(h|cpp)$,/dev/null,x" --absolute-names --show-transformed-names
hoge/
hoge/dist/
hoge/dist/index.html
hoge/dist/index.js
hoge/LICENSE
hoge/README.md
hoge/src/
hoge/src/include/
/dev/null
/dev/null
/dev/null

応用例

SDL2の各種ライブラリからbin/、include/、lib/以下を抜き出して直下に配置する。

$ ls
SDL2-devel-2.0.12-mingw.tar.gz  SDL2_image-devel-2.0.5-mingw.tar.gz
$ find -name "SDL2*.tar.gz" | xargs -I{} tar zxvf {} --transform="s,^[^/]+/x86_64[^/]+/(bin|include|lib),\1,x;s,^SDL2,/dev/null/,x" --absolute-names --show-transformed-names
...
$ ls 
SDL2-devel-2.0.12-mingw.tar.gz  SDL2_image-devel-2.0.5-mingw.tar.gz bin include lib

あとがき

存在しないディレクトリとかtarが適当に用意してくれます。mkdirもcpもmvも不要で楽です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1