rm コマンドのエイリアスを晒す

  • 9
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

rm コマンドにおいて、『やってはいけない』とされているのが以下の2つ

$ rm -rf /

$ rm .*

不図とした拍子のタイプミスや勘違いによる実行など、考えただけでもゾッとします。
逆に、rm コマンドの安全対策としては以下の3つが挙げられます。

.bashrc
alias rm='rm -i'
.bashrc
set rmstar
.bashrc
alias rm='mv -i ~/Trash'

しかし、私としては

  1. ファイル毎にy[Enter]をタタくのは面倒だ

  2. *を用いて、ファイルを安全かつ効率的に削除したい

ので、rm コマンドに以下のエイリアスを被せています。

.bashrc
alias rm='set -f; rmrm'
function rmrm() {
    local ch
    echo $@ | grep -Gq "^/$\| /$\|^/ \| / "
    if [ $? -eq 0 ]; then
        set +f
        echo "DONOT execute 'rm /'"
        return 1
    fi

    echo $@ | grep -q "*"
    if [ $? -eq 0 ]; then
        set +f
        ls $@
        if [ $? -ne 0 ]; then
            return 0
        fi
        echo -n "Are you sure? [Y/n] "
        while : ; do
            read ch
            if [ "${ch}" = "Y" ]; then
                command rm $@
                return 0
            elif [ "${ch}" = "n" ] || [ "${ch}" = "N" ]; then
                return 1
            else
                echo -n "[Y/n]"
            fi
        done
    else
        command rm $@
        return 0
    fi
}

上記のエイリアスによって

$ ls
hoge.aux hoge.dvi hoge.log hoge.pdf hoge.tex piyo.eps

$ rm hoge*
hoge.aux hoge.dvi hoge.log hoge.pdf hoge.tex
Are you sure? [Y/n] Y

$ ls
piyo.eps

となります。