基于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
相关推荐
TDengine (老段)21 分钟前
TDengine 线程模型 — 网络、调度、执行
大数据·数据库·物联网·制造·时序数据库·tdengine·涛思数据
琥珀色糖1 小时前
Linux守护进程
linux·终端·守护进程·会话·进程组
上学的小垃圾1 小时前
01-数据库系统概述
数据库
二进制漫游记2 小时前
FastAPI项目集成 Qdrant向量数据库+阿里云Embedding完整实战(工具封装+业务调用)
数据库·python·阿里云·embedding
2501_928996222 小时前
GPT-4o换DeepSeek迁移成本多少?中科热备解析API聚合平台技术账本
前端·数据库·人工智能
FungLeo2 小时前
成为全栈·Node 后端篇·数据迁移:schema 变更如何不弄脏线上数据
sqlite·orm·schema·d1·node 后端·drizzle
泡干脆面就番茄4 小时前
MySQL_子查询_分页查询与联合查询详解
数据库·mysql
开心大爆炸5 小时前
xrdp 连接 登录对话框输入密码后闪退
linux·运维·服务器
oushaojun25 小时前
大厂 C++ 面试:深度剖析 Linux Signal 信号机制(转)
linux
devpotato5 小时前
缓存与数据库更新顺序不一致问题
java·数据库·redis