Edited at

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

More than 3 years have passed since last update.


ダメ人間の日常

例えば適当なファイルを一時的に落としてきてちょっと使ったら捨てたいだとか、そんなとき僕はよく 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 な状態で作られるので別ユーザに覗かれる心配もなくなる。