ファイル名の交換コマンド: mvswap
最近,シェル上でファイル名を交換することが多くなってきた.こんなコマンドをよく打つ.
% mv hoge hoge.tmp % mv fuga hoge % mv hoge.tmp fuga
指が疲れるし,誤って操作をする確率も高くなる.
そこでこんなシェルスクリプトを書いて,~/binにぶちこんでおいた.
- ~/bin/mvswap
#!/bin/sh # TMPNAME=".tmp-hoge-fuga-piyo" # さすがにこんなファイル名をつけている人いないでしょう TMPNAME=`mktemp` # 重複のないファイルを/tmp以下に作成.ファイル名を受け取る (2009-12-30追記) if [ $# -eq 2 ]; then mv $1 $TMPNAME mv $2 $1 mv $TMPNAME $2
- 動作確認
% ls a b % cat a hoge % cat b fuga % mvswap a b % cat a fuga % cat b hoge
ちゃんと動いているみたい.
もっとスマートな方法があるのかなぁ?知っている方がいたら教えてください.
2009-12-30追記
mochaさんに頂いたコメントを元にちょっとだけ修正しました.
mktempコマンドを用いて/tmp以下に重複のないファイルを作成し,そのファイル名を中間ファイル名に使用します.
これでより安全にファイル名の交換ができるようになりました.
mochaさんありがとうございます!