linux入坑第一步:编写自己的 rm(含有定时删除功能)

第一步,编写垃圾桶文件

初学者注意修改本案例中的所有路径名

先创建一个创建一个垃圾桶目录mkdir trash并且设置垃圾桶权限chmod 755 trash
写一个rm_time(/home/lidecao/scriptTask/rm_timing/safe_rm.sh)文件设置可运行权限同上即可

#!/bin/bash

dir=`date +"%y_%m_%d"`
#echo $dir
dir="/home/lidecao/trash/$dir"
#echo $dir

if [[ ! -d $dir ]]; then
    mkdir $dir
fi
logsname="$dir/logs"
if [[ ! -f $logsname ]]; then
    touch $logsname
fi

temprf=false
args=''

#deleting function
function remove(){
     
    echo "rm path:" `pwd` >> $logsname
    for i in $args ; do
        #echo "$i 1"
        if [ -d $i -o -f $i ] ; then
            name=`basename $i`
           # echo "$name 2"
            if [ -d "$dir/$name" -o -f "$dir/$name" ]; then # already exist
                new_name="$dir/${name}_$(date +"%T")"
                mv $i $new_name && echo "$i deleted, you can see in $new_name"
                echo "source: $i" >> $logsname
                echo "dest: $new_name" >> $logsname
            else
                mv $i $dir && echo "$i deleted, you can see in $dir"
            fi
        else
            echo "unknown error "
            echo "Please check if the file exists."
        fi
    done
    echo " " >> $logsname
}

#echo $1
#Read commands and parameters
while [[ $1 ]]; do
    case "$1" in
        -fr|-rf)
            temprf=true
            shift
            ;;
        -i)
            temprf=false
            shift
            ;;
        *)
            args="$1 $args"
            shift
            ;;
    esac
done
#echo $temprf

#判断命令 Judgment command
if [[ $temprf = true ]]; then
    remove
else
    read -p "Remove $args?[y/n] " temp
    if [[ $temp = y ]]; then
        echo "$args"
       remove
    elif [[ $temp = n ]];then
        exit
    else
        echo "Input error, please reinput."
        exit
    fi
fi

第二步,设置变量别名

将脚本放到指定目录下

在bashrc或者zshrc文件下添加一行行

#自己写的以前的
`alias rms=/home/lidecao/scriptTask/rm_timing/safe_rm.sh`
#注释掉以前的
`alias rm="巴拉巴拉"`

设置完成之后更新bashrc文件

source ~/.bashrc或者./.bashrc

注意:bashrc是一个隐藏文件

第三步,编写定时删除文件

在rm_timing下面写一个time_rm.sh

#!/bin/bash
#find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \;
find /home/lidecao/trash -mtime +7 -name "*" -exec /usr/bin/rm -f {
     } \;
#删除垃圾桶中大于时间7天的文件

第四步,设置定时任务

在中断输入crontab -e

第一次使用会让你选择编译器 我选择的是vim

然后加入下面一行

#分 时 日 月 周 命令
0 10 * * 6 /home/lidecao/scriptTask/rm_timing/time_rm.sh

参考和引用

借鉴网址https://blog.csdn.net/newbietao/article/details/79833655

权限解释网址https://blog.csdn.net/slpond/article/details/53282167

date解释网址https://blog.csdn.net/hao_hl1314/article/details/61913288

crontab 解释网址https://www.cnblogs.com/intval/p/5763929.html

你可能感兴趣的:(linux)