削除するとき、まとめて訊ねる

ワイルドカードを利用した rm コマンドは便利ですが、指定し間違えると意図しないファイルをも削除してしまいます。一方で -i をつけて対話的にしても、個々のファイルで訊ねられるため、面倒です。

そこで、削除対象をすべて表示してうえで削除するかどうかを訊ねるようにしてみます。

#!/bin/sh

# /home/naoki/bin/rm.sh

if [ $# -ne 0 ]; then
  ls -ld $*
  echo ''
  # confirm.sh は /home/naoki/bin にあるとする
  /home/naoki/bin/confirm.sh 'delete above files?'
  if [ $? -eq 0 ]; then
    /bin/rm -rf -- $*
  fi
fi

confirm.sh はYes/No を確認するで作ったもの。

# エイリアスを .bash_profile などに書く
alias rm='/home/naoki/bin/rm.sh'
# vim のバックアップファイルを削除する
$ rm *~
-rwxrwxr-x 1 naoki naoki 571 2011-12-27 18:44 confirm.sh~
-rwxr-xr-x 1 naoki naoki 153 2011-12-28 01:24 rm.sh~

delete above files? (y/N) y

もしスペースを含むファイルも対象にするときは rm '*.txt' などのようにくくると大丈夫です。