72
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

サッと一時ディレクトリを作って作業して捨てる

ダメ人間の日常

例えば適当なファイルを一時的に落としてきてちょっと使ったら捨てたいだとか、そんなとき僕はよく mkdir /tmp/a; cd /tmp/a してから何かするとかやってたんだけど、これ良くない点が色々ある。

  • 一時ディレクトリに使う名前のボキャブラリが貧困な上に掃除もサボるので名前が被りまくってmkdirが中々出来ない→結果こうなる
  • 後始末しないで放置も多いのでゴミファイルが増えてディスクの無駄だしパスワードや個人情報とか消すべきセンシティブな情報が含まれてると色々問題。
  • 一時ディレクトリでの作業が終わったら元いた場所に戻りたいけど元いた場所が深いとこだったりすると戻るのが面倒だしそもそも何やってたか忘れてる事も…。

tmpspaceコマンドで解決だ!

そこでそんな問題を解決するために以下のような bash 関数を作って、~/.bashrc とかに書いておくことにした。

# 一時作業用コマンド http://bit.ly/22GF66y
tmpspace() {
  (
  d=$(mktemp -d "${TMPDIR:-/tmp}/${1:-tmpspace}.XXXXXXXXXX") && cd "$d" || exit 1
  "$SHELL"
  s=$?
  if [[ $s == 0 ]]; then
    rm -rf "$d"
  else
    echo "Directory '$d' still exists." >&2
  fi
  exit $s
  )
}

# typoで補完が出てこないのもストレスなのでaliasも作っておくことにした
alias tempspace=tmpspace

使い方は簡単で、何か一時的な作業をしたくなったら tmpspace と打てば良い。作業が終わったら exit するだけだ。これにより以下のようなメリットが受けられるようになる。

  • 一時ディレクトリ名を考える必要が無くなる。
  • exit すれば元いた場所に戻れる。
  • exit すれば一時ディレクトリも消える。
  • 一時ディレクトリを残したままにしておきたければ exit 1 とかすればOK。
    • 残った一時ディレクトリのパスも復帰時に表示してくれる。
    • 大事な作業中ファイルがある状態で異常終了(sshが切れた等)した場合は自動クリーニングされない。
  • 一時ディレクトリは chmod 700 な状態で作られるので別ユーザに覗かれる心配もなくなる。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
72
Help us understand the problem. What are the problem?