shell 删除文件时做备份

#!/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 "$@"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的天才女友

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值