LoginSignup
1
1

More than 3 years have passed since last update.

「rm -rf」でrm -iのように確認する方法。

Last updated at Posted at 2020-10-27

rm -rfでやらかした!

先日rm -rf ~/を誤って実行してしまいました。
バックアップは取っていたので大事には至らなかったのですが、復旧が面倒だったので失敗から学ぶ方法を考えることにしました。

私の案としては、rm -iのように実行する前に今から消すディレクトリに確認を取るように設定することを本記事で提案します。

# こういう確認メッセージが欲しい。
$ alias rm='rm -i'
$ touch hoge
$ rm hoge
remove hoge? 

動作確認済み環境

Ubuntu 20.04 (bash)
MacOS Catalina (zsh)

作成したもの

まず、単純にシェルスクリプトを書いて、それにエイリアスを通そうと考えました。

# ダメな例
alias 'rm -rf'='hoge.bash'
# 定義できるけどなんかダサい
alias rm-rf ='hoge.bash' #rm とオプションの間のスペースがない。

どうやらaliasにスペースを含んだものを定義できないようです。
そこでbashrcに直接rm関数を定義してオプションにr,fが含まれている場合のみ確認を表示するようにしました。

bashrcに以下の関数をコピペするだけで使用できます。


function rm(){
        DIR=`eval echo '$'$#`
        OPTION=${@%*$DIR} #パターンマッチングで引数全体からディレクトリ名を除いたオプション部分
    if [[ $OPTION =~ r && $OPTION =~ f ]]; then #オプションにr,fが含まれているか正規表現によるマッチング
        echo "rm -rf: remove directory $DIR? [y,n]"
        read yesnojudge
        case "$yesnojudge" in
            "y")
                command rm $@ #元のrmコマンドを実行
                ;;
            "n")
                :
                ;;
            ?)
                echo INVAILED OPTION
                ;;
        esac
    else
        command rm $@
    fi
}

実行イメージ

$ rm -rf hoge
remove directory hoge? [y,n]

確認メッセージが表示されyを打つとrm -rfが実行されます。

最後に

何かいい案が他にありましたらコメント欄で教えていただけると幸いです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1