基于sqlite3的linux终端回收站 rm trash

基于sqlite3的linux终端回收站,将回收站的数据在sqlite3中记录

支持多个同名文件的删除和恢复

_alias_rm__trash_by_sqlite3.sh

sh 复制代码
shopt -s  expand_aliases
trash_dir=~/.trash
mkdir -p  $trash_dir
alias rm=trash

DB=$trash_dir/.trash.db

[ ! -e $DB ] && cat <<EOF | sqlite3 $DB
CREATE TABLE "FileInfoTab" (
    "ID"    INTEGER UNIQUE,
    "SHA"   TEXT UNIQUE,
    "delTime"   TEXT,
    "FileName"  TEXT,
    PRIMARY KEY("ID" AUTOINCREMENT)
)
EOF

trash()
{
    # 循环是因为可能rm多个文件
    for arg in "$@"
    do
        # 判断文件存在,同时过滤掉rm命令的参数
        if ls $arg > /dev/null
        then
            # 获取文件的绝对路径,传递进来的可能是一个文件 文件夹 符号链接
            # 转换文件的名字
            delTime=$(date +"%Y%m%d_%H%M%S")
            FileName=$(python -c "import os; print(os.path.abspath('${arg}'))")
            SHA=$(echo ${delTime}"@@@@"${delTime} | sha1sum | awk '{printf $1}' )
            #echo ${trashname}
            # 已存在的同名文件按数字重命名,避免覆盖
            #echo "${SHA}","${delTime}","${FileName}" 
            printf "INSERT INTO \"FileInfoTab\" (\"SHA\",\"delTime\",\"FileName\") VALUES (\"${SHA}\",\"${delTime}\",\"${FileName}\");" | sqlite3 $DB
            mv --backup=numbered $arg  ~/.trash/${SHA}
        fi
    done
}


rl()
{
    printf "SELECT \"ID\",\"delTime\", \"FileName\" FROM \"FileInfoTab\" ;" | sqlite3 $DB
}


ur()
{
    for arg in "$@"
    do
        printf "SELECT FileName,SHA FROM FileInfoTab WHERE ID=$arg;" | sqlite3 $DB | awk -F'|' '{system("mv ~/.trash/"$2" "$1)}';
        [ $? -eq 0 ] && printf "DELETE FROM FileName WHERE ID=$arg;" | sqlite3 $DB
    done
}


rc()
{
    read -p "DELETE ALL in trash, confirm?[n]" confirm
    if [ $confirm ]
    then
        if [ $confirm = 'y' -o $confirm = 'Y' ]
        then
            /bin/rm -rf ~/.trash/*
            printf "DELETE FROM FileName;" | sqlite3 $DB
        fi
    fi
}

回收站目录

复制代码
>>> ls ~/.trash/ -a
.  ..  .trash.db  e8803e54711118162819b392bdde4db8f75c092a

查看回收站

复制代码
>>> rl
1|20241030_113345|/home/zhangbin/xxxx/xxxx/xxx/xxxx

恢复文件

sh 复制代码
ur 1
相关推荐
nbsaas-boot4 分钟前
SQL Server 存储过程开发规范(公司内部模板)
java·服务器·数据库
zgl_200537794 分钟前
ZGLanguage 解析SQL数据血缘 之 Python + Echarts 显示SQL结构图
大数据·数据库·数据仓库·hadoop·sql·代码规范·源代码管理
acaad35 分钟前
Redis下载与安装(Windows)
数据库·redis·缓存
玄〤36 分钟前
黑马点评中 VoucherOrderServiceImpl 实现类中的一人一单实现解析(单机部署)
java·数据库·redis·笔记·后端·mybatis·springboot
zz_nj1 小时前
工作的环境
linux·运维·服务器
SunflowerCoder1 小时前
EF Core + PostgreSQL 配置表设计踩坑记录:从 23505 到 ChangeTracker 冲突
数据库·postgresql·c#·efcore
短剑重铸之日1 小时前
《7天学会Redis》Day2 - 深入Redis数据结构与底层实现
数据结构·数据库·redis·后端
极客先躯1 小时前
如何自动提取Git指定时间段的修改文件?Win/Linux双平台解决方案
linux·git·elasticsearch
Zoey的笔记本2 小时前
「支持ISO27001的GTD协作平台」数据生命周期管理方案与加密通信协议
java·前端·数据库
suijishengchengde2 小时前
****LINUX时间同步配置*****
linux·运维