基于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
相关推荐
马尔代夫哈哈哈17 分钟前
Spring IoC&DI
数据库·sql
液态不合群2 小时前
[特殊字符] MySQL 覆盖索引详解
数据库·mysql
pride.li2 小时前
开发板和Linux--nfs服务挂载
linux·运维·服务器
计算机毕设VX:Fegn08953 小时前
计算机毕业设计|基于springboot + vue蛋糕店管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
looking_for__3 小时前
【Linux】应用层协议
linux·服务器·网络
瀚高PG实验室3 小时前
PostgreSQL到HighgoDB数据迁移
数据库·postgresql·瀚高数据库
BB_CC_DD3 小时前
Linux截图工具(ubuntu18.04+flameshot(火焰截图))
linux
打码人的日常分享3 小时前
智能制造数字化工厂解决方案
数据库·安全·web安全·云计算·制造
三水不滴3 小时前
Redis 过期删除与内存淘汰机制
数据库·经验分享·redis·笔记·后端·缓存
云泽8084 小时前
不止是命令:Linux 高频指令实战 + 芯片架构底层逻辑
linux·运维·服务器