LoginSignup
8
6

More than 3 years have passed since last update.

bash > rmタイプミスでの意図しない削除を予防する > N個以上の時に確認をする v0.1, v0.2, v0.3

Last updated at Posted at 2017-11-06
動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv

失敗

$ rm -rf log.* 

とするところを以下とした。

$rm -rf log. *

そのディレクトリにあったファイルが消えた。バックアップを取っていたため復旧できたが、場合によっては、関連ソフトの再構築が必要となる。

回避案 my_rm_171106_exec v0.1

削除する時、N個以上の時に確認メッセージを表示するようにしてみる。
(下記はN=3での実装例)

my_rm_171106_exec
#!/usr/bin/env bash

# Nov. 06, 2017
#   - add cancellation
#   - check number of arguments

echo "rm $@"

if [ $# -ge 3 ]; then
    echo "Are you sure? [y/N]"
    read key
    if [ "$key" != "y" ]; then
        echo "canceled"
        exit
    fi
fi

rm $@
echo "Deleted"
run
$ ../my_rm_171106_exec -f *
rm -f a b c d
Are you sure? [y/N]
(ここで、y以外のキーを入力してEnter)
canceled
run
$ ../my_rm_171106_exec -f *
rm -f a b c d
Are you sure? [y/N]
(ここで、yキーを入力してEnter)
y
Deleted

コマンドの使用

.bashrcなどでmy_rm_171106_exec へのパスを通しておく。
rmへのaliasは行わない。理由として、通常とは異なるrmの使用に慣れてしまうと、通常のOS上であやまった操作を誘発するため。

チェックするNの数は実際に使用して調整するとよい。

関連

失敗の一因

失敗をしてはいけない作業中に、傍らでお話しがある場合がある。その話に耳を持っていかれると、不要な失敗をしてしまう。

my_rm_171106_exec v0.2

(追記 2018/03/19)

確認メッセージの前にファイル数が表示されている方が良いと思った。

my_rm_171106_exec
#!/usr/bin/env bash

# Mar. 19, 2018
#   - show number of files to be deleted
# Nov. 06, 2017
#   - add cancellation
#   - check number of arguments

echo "rm $@"

if [ $# -ge 3 ]; then
    echo "[$#] files will be deleted."
    echo "Are you sure? [y/N]"
    read key
    if [ "$key" != "y" ]; then
        echo "canceled"
        exit
    fi
fi

rm $@
echo "Deleted"
使用例
...
[840] files will be deleted.
Are you sure? [y/N]

ファイル名入力を間違った時、明らかにファイル数が多くなる(下記)。

...
[3130] files will be deleted.
Are you sure? [y/N]

my_rm_171106_exec v0.3 > N=1以上に変更

(追記 2019/10/10)

似た名前のコマンドを実装して、そちらを使うつもりがこちらのコマンドを実行してしまった。
パラメータ数2つでの実行。
結果として、ファイルを削除してしまった。

同じ失敗を繰り返さないように、確認するように変更した。

my_rm_171106_exec
#!/usr/bin/env bash

# Oct. 10, 2019
#   - unlimit number of files with which the confirmation is displayed
# Mar. 19, 2018
#   - show number of files to be deleted
# Nov. 06, 2017
#   - add cancellation
#   - check number of arguments

echo "rm $@"

#if [ $# -ge 3 ]; then
echo "[$#] files will be deleted."
echo "Are you sure? [y/N]"
read key
if [ "$key" != "y" ]; then
    echo "canceled"
    exit
fi
#fi

rm $@
echo "Deleted"
$ my_rm_171106_exec AAA BBB
rm AAA BBB
[2] files will be deleted.
Are you sure? [y/N]

canceled
8
6
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
8
6