_RJ 技術メモ

人生を豊かにする技術を提供する、筋肉

tarコマンドが覚えられないので、簡単に指定できるエイリアス(圧縮のみ)

Bash alias Linux Terminal Mac

概要

圧縮しようとするたびに感じるのが、tarコマンドを覚えようとしても引数が多かったり、拡張子と引数が頭の中でリンクしなかったりなど、覚えるのには少しハードルが高いと感じる。zipコマンドのようにzip fileのように指定するだけで圧縮したいと思い、以下のエイリアスを設定した。圧縮形式も選択できる。

コマンドの使い方

  • 引数により圧縮形式を選べる (low=-l, middle=-m, high=-h)
  • ディレクトリの指定可 (/dir/fileなど)
  • 圧縮拡張子は自動で付与
  • etarはeasy-tarの略 (解凍の時はunetarにしたい)

通常の圧縮(tar.gz)

$ etar file1
file1.tar.gz

出力ファイルを指定して通常の圧縮(tar.gz)

出力ファイルの拡張子の指定はいらない

$ etar file1 file2
file2.tar.gz

高圧縮(tar.gz2)

-m(middle)を引数にする

$ etar -m file1 file2
file2.tar.gz2

超高圧縮(tar.xz)

-h(high)を引数にする

$ etar -h file1 file2
file2.tar.xz

導入方法

.bash_profileに追記か、別ファイルの作ってsourceを通す プログレスの表示のためpvコマンドを使用しているので、pvのインストールが必要

$ brew install pv #mac osx
$ yum install pv #centos
$ yum install pv #debian
$ vim ~/.bash_profile
#以下のソースコードを.bash_profileに追記する
function etar(){
  #使い方
  function etarUsage(){
    echo 'etar: usage:
    etar [input file] [output file]
    etar -l [input file] [output file]
    etar -m [input file] [output file]
    etar -h [input file] [output file]'
  }

  #引数がない場合
  if [ $# == 0 ]; then
    etarUsage
    return
  fi
  
  #引数がある場合
  if [ ${1:0:1} = '-' ]; then  #-からの引数がある場合
    if [ $1 == '-h' ]; then #超高圧縮(tar.xz)
      if [ $# == 3 ]; then
        tar Jcf - $2 | pv > $3.tar.xz
      else
        tar Jcf - $2 | pv > ${2%.*}.tar.xz
      fi
    elif [ $1 = '-m' ]; then #高圧縮(tar.gz2)
      if [ $# == 3 ]; then
        tar jcf - $2 | pv > $3.tar.gz2
      else
        tar jcf - $2 | pv > ${2%.*}.tar.gz2
      fi
    elif [ $1 = '-l' ]; then  #通常圧縮(tar.gz)
      if [ $# == 3 ]; then
        tar zcf - $2 | pv > $3.tar.gz
      else
        tar zcf - $2 | pv > ${2%.*}.tar.gz
      fi
    else  #引数が存在しない
      etarUsage
    fi
  else #引数がファイルのみ tar.gz
    if [ $# == 2 ]; then
      tar zcf - $1 | pv > $2.tar.gz
    else
      tar zcf - $1 | pv > ${1%.*}.tar.gz
    fi
  fi
}

alias etar=etar

今後について

解凍のコマンドも作りたい (unetar)