#!/bin/bash
# 定义一个目录由于保存用户删除文件
archivedir="$HOME/delete-files"
# 删除命令的路径
realrm="$(which rm)"
# 复制命令的路径 —R 表示递归复制,如果存在文件夹复制文件夹下的文件,全部复制
copy="$(which cp) -R"
# 如果参数为0,调用删除的命令,让其报错
if [ $# -eq 0 ] ; then
#exec 调用对应删除的命令,此脚本结束,realrm执行返回
exec $realrm
fi
# 定义接收的参数
flags=""
#getopts 解析对应的参数 储存在对应变量opt中
while getopts "dfiPRrvW" opt
do
case $opt in
# 如果变量中有参数f,f对应的删除命令rm 就是直接删除,直接调用删除命令,$@所用参数,将其传递到对应的删除命令
f ) exec $realrm "$@" ;;
# 如果参数是其他就保存在变量,带上- 是为了参数在删除命令的时候使用
* ) flags="$flags -$opt" ;;
esac
done
# 跳过被解析的参数,$OPTIND -1 就是被解析过的参数
shift $(( $OPTIND -1 ))
# 判断保存删除文件的目录是否存在
if [ ! -d $archivedir ] ; then
# 如果不存在对应目录,-w表示是否可以在当前目录操作
if [ ! -w $HOME ] ; then
# 不能创建的话,输出对应的命令,>&2重定向标准错误输出
echo "$0 失败:不能创建 $archivedir 在目录 $HOME">&2
exit 1
fi
# 制作目录
mkdir $archivedir
# 给与目录一定的权限
chmod 700 $archivedir
fi
# 遍历参数
for arg
do
# 新文件名 时间的格式化输出加上文件的基本名字
newname="$archivedir/$(date "+%S.%M.%H.%d.%m").$(basename "$arg")"
# 如果对应的路径 为目录或者文件
if [ -f "$arg" -o -d "$arg" ] ; then
#执行copy命令,将文件复制过去
$copy "$arg" "$newname"
fi
done
# 执行对应的删除命令,将参数和对应的命令传递过去
exec $realrm $flags "$@"
shell 删除文件时做备份
最新推荐文章于 2024-10-17 20:17:36 发布