基于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
相关推荐
lsh曙光36 分钟前
延时at指令和定时cron指令
linux·服务器·网络
圆山猫1 小时前
[Virtualization](四):Linux KVM/RISC-V 的 vCPU 运行路径
java·linux·risc-v
笨鸟先飞,勤能补拙1 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
天桥下的卖艺者1 小时前
使用scitable包,两步生成逆概率删失权重(IPCW)
数据库·r语言
似的8351 小时前
一步一步学习使用FireMonkey动画() 使用TAnimator类创建动画
linux·学习·nginx
隔窗听雨眠1 小时前
AI原生数据库浪潮:国产数据库的架构重构与路径之争
数据库
数据库小学妹2 小时前
数据库选型实战:从数据类型到TCO成本,五维决策框架+九款产品横评
数据库·信创·国产数据库·数据库选型·oracle迁移
我不管我就要叫小猪3 小时前
嵌入式Linux----网络通信
linux·运维·服务器
神龙天舞20013 小时前
MySQL 备库为什么会延迟好几个小时
android·数据库·mysql
泡沫冰@3 小时前
ECS 的介绍和使用
linux·服务器·网络