GitHub の Releases から tar.gz
をダウンロードする場合,普通に展開すると,以下のようにバージョンを含んだディレクトリになる.なお,今回はサンプルとして utils という名前にしている.
$ tar zxvf utils-1.2.3.tar.gz x utils-1.2.3/ x utils-1.2.3/README.md x utils-1.2.3/src/ x utils-1.2.3/src/xxx.rb x utils-1.2.3/src/yyy.rb x utils-1.2.3/src/zzz.rb $ tree . . ├── utils-1.2.3 │ ├── README.md │ └── src │ ├── xxx.rb │ ├── yyy.rb │ └── zzz.rb └── utils-1.2.3.tar.gz 2 directories, 5 files
--strip-components 1
そこで --strip-components
オプションを使うと,展開後のディレクトリを切り捨てて,第2階層をフラットに展開することができる.
$ tar zxvf utils-1.2.3.tar.gz --strip-components 1 x README.md x src/ x src/xxx.rb x src/yyy.rb x src/zzz.rb $ tree . . ├── README.md ├── src │ ├── xxx.rb │ ├── yyy.rb │ └── zzz.rb └── utils-1.2.3.tar.gz 1 directory, 5 files
--strip-components 2
ちなみに --strip-components 2
とすると,第3階層をフラットに展開することができる.
$ tar zxvf utils-1.2.3.tar.gz --strip-components 2 x xxx.rb x yyy.rb x zzz.rb $ tree . . ├── utils-1.2.3.tar.gz ├── xxx.rb ├── yyy.rb └── zzz.rb 0 directories, 4 files
--strip-components 1 と -C
最後に --strip-components
と -C
オプションを使うと,第1階層のディレクトリ名を変更して展開することができる.仕組みとしては -C
で指定したディレクトリの直下に --strip-components
でフラットに展開することにより,ディレクトリ名を変更したように見える.知っておくと便利だと思う!
$ mkdir utils && tar zxvf utils-1.2.3.tar.gz -C utils --strip-components 1 x README.md x src/ x src/xxx.rb x src/yyy.rb x src/zzz.rb $ tree . . ├── utils │ ├── README.md │ └── src │ ├── xxx.rb │ ├── yyy.rb │ └── zzz.rb └── utils-1.2.3.tar.gz 2 directories, 5 files