基于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
相关推荐
两点王爷3 小时前
PostgreSQL 常用 SQL 语句与 GIS 相关函数详解
数据库·后端
两点王爷3 小时前
PostgreSQL 好用又独特的特性与空间函数
数据库
充电zcx3 小时前
Linux:4:开发工具详解
linux·运维·服务器
梦帮科技3 小时前
AI 音乐产品的发布工程:验证门、数据发布、回滚与生产运维纪律
数据结构·数据库·架构·node.js·音视频·动态规划·推荐算法
TDengine (老段)4 小时前
TDengine 常见问题 TOP3
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
码农客栈7 小时前
linux 交叉编译tslib
linux
螺蛳粉 螺蛳粉7 小时前
MySQL 分布式集群系列 · 第五篇——全方位对比:NDB、MGR、主从复制、分库分表怎么选?
数据库·分布式·mysql
鱼月半7 小时前
两台电脑直连网络不通怎么办?
linux·网络协议
光电笑映8 小时前
网络通信基础:从协议分层到 Socket 编程预备
linux·运维·服务器·网络
酸菜。8 小时前
dw_apb_gpio总结
linux