動作環境
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