在linux系统中,删除文件或者目录时,大部分同学都是rm -rf *,这样通配很容易造成误删,或者该删除某个应用下的bin目录,结果删成了/bin,路径不一致也会造成误删,而linux系统是没有回收站的,删了就是删了,无法找回。所以删除文件操作我们应该养成加参数 -i的习惯,可一一确认是否删除,尤其是在批量删除时尤为重要,还有尽量用绝对路径。
当然即使我们按上面的操作来做,但常在河边走,哪有不湿鞋,我们可能就会有几次误删操作,如果严重的话,删库跑路也不是不可能,所以我们有必要建立一个像windows系统一样的回收站机制,删了可以找回。
删文件本质上是把这个文件mv转移到另外一个路径,正常的rm是把文件直接从磁盘上转移抹除了,而我们可以不这样做,我们可以写一个命令让它mv到一个文件夹,把这个文件夹当作回收站,误删了从这个文件夹里就可以找回,然后为了防止存储溢出,可以制定策略定时清理之前的文件。
由于这个命令是自定义的,故可以随意制定名字,我们把这个命令命名为delete,当然你也可以叫其他名字,比如shanchu,比如mmp,都可以的,只不过delete通俗易懂,人家一看就知道这个命令是删除命令。delete如何使用,以及运行的机制都在下面的shell中有所体现。
# 编辑命令
vim delete
#!/bin/bash
################################################################################
# SCRIPT_NAME : delete.sh
#
# CREATE_TIME : 2018/09/11
# AUTHOR : Mochou_liqb
#
# DESCRIBETION : delete some files and these files can be found in the linux's trash
# PARAMETER : files' name
# EXAMPLE : delete file1 file2 file3...
#
# UPDATE_RECORD : no now
#
# DATE OPERATION CZR DESCRIBETION
# ________ _____________ ________ __________________________________
#
# 2018/09/11 UPDATE Mochou_liqb
################################################################################
## 建立回收站机制,删除文件时把文件转移到.trash文件夹中,以备误删找回
if [ ! -d ~/.trash ]; then
mkdir -p ~/.trash
fi
if [ $# -eq 0 ]; then
#提示delete的用法
echo "Usage:delete file1 [file2 file3...] "
else
echo "You will delete these files:"
echo $@
#要求用户确认是否删除这些文件,回答n或者N放弃删除,其他字符表示确认
echo -n "Are you sure to do this?[Y/N]:"
read reply
if [ "${reply}" != "n" ] && [ "${reply}" != "N" ]; then
for file in $@
do
#判断文件或者目录是否存在
if [ -f "${file}" ] || [ -d "${file}" ]; then
mv -b "${file}" ~/.trash/
else
echo "${file}: No such file or directory"
fi
done
else
echo "No files removed"
fi
fi
编辑保存完毕后,把这个文件转移到/bin目录下,就可以在任意一个路径下使用delete命令了,大家可以自行测试该命令