用命令行交互,经常使用rm -rf 删除目录和文件,用惯了,有时脑袋一抽,错删,造成不可恢复的痛苦。
用户往往在误删后第一时间知道自己操作失误,想紧急采取补救措施,但往往于事无补。保险删除是在选项中加i,再删除时一一确认。但这样做太麻烦,有没有方便点的工具呢?
所以开发一个替代工具或脚本,将使用人员要删除的文件先转换为隐藏文件,并设置自动处理,设置时间阀值,到时间后自动删除文件。
使用该工具或脚本后,打印产生的临时目录,自动清除的时间,自动删除的进程。用户可在自动清除前kill进程来结束删除操作,并进入临时目录恢复文件即可。
脚本名:rmrf
#! /bin/sh
AfterExeTime=10 #稍后执行删除时间长度(minutes)
function_use_rmrf() {
cat <<USE_RMRF
Usage: rmrf [OPTION] [FILE]...
To delete file/directory. When you use thiscommand. The file/directory
will be moved To a hide directory which namedby current time. After $AfterExeTime
minutes, this hide directory will bedeleted automated.Use this command
to delete file/directory will be nise.Whenyou find you are wrong to rm
this file/directory. You can kill the rmrfprogram PID during this times
and goto the hide tempdirectory To recoverthe file/directory.
[OPTION]:
-h
--h Display the command rmrfusage
[FILE]:
The file/directory name. You can use wildcard character '*''?'.
USE_RMRF
}
# 产生暂存删除文件的隐藏目录名
function_currenttime_dirname() {
tempdir=.tempdir$(date -u +%Y%m%d%H%M%S)
mkdir $tempdir
}
if [ $# -eq 0 -o "$1" = "-h"-o "$1" = "--h" ] ;then
function_use_rmrf
exit 0
fi
# 判断位参表示的文件是否存在,有不存在的退出
ndmkdir=0 #用于判断本次删除操作是否已经是新建临时文件夹
for filedir in "$@"
do
if [ -f $filedir -o -d $filedir ] ;then
if [ $ndmkdir -eq 0] ;then
function_currenttime_dirname #新建临时文件夹
ndmkdir=1
fi
mv $filedir $tempdir
else
echo "Not Exist orAlready deleted file/directory: $filedir "
fi
done
( sleep $(expr $AfterExeTime \* 60) #睡眠时间(s)
rm -rf$tempdir ) &
echo "===> rmrfPID: $! "
echo "===> TempDirName: $tempdir "
echo "===> AfterExeTime: $AfterExeTime min(s)"
exit 0