Jast blog Jast blog
首页
  • 《Ambari自定义开发教程》笔记
  • 《CDH教程》笔记
  • 《ClickHouse教程》笔记
  • 《HDFS教程》笔记
  • 《DolphinScheduler教程》笔记
  • 《Hbase教程》笔记
  • 《Iceberg教程》笔记
  • 《Hive教程》笔记
  • 《Flume教程》笔记
  • 《Kafka教程》笔记
  • 《Impala教程》笔记
  • 《Hue教程》笔记
  • 《Spark教程》笔记
  • 《Flink教程》笔记
  • 《Phoenix教程》笔记
  • 《ElasticSearch教程》笔记
  • 《Kylin教程》笔记
  • 《Storm教程》笔记
  • 《Yarn教程》笔记
  • 《Presto教程》笔记
  • 《图数据库教程》笔记
  • 《Kerberos教程》笔记
  • 《Maxwell教程》笔记
  • 《MinIO教程》笔记
  • 《DataX教程》笔记
  • 《Superset教程》笔记
  • 《IOTDB教程》笔记
  • 《大数据相关》笔记
  • 《PaddleNLP教程》笔记
  • 《Nginx教程》笔记
  • 《Java技术文档》
  • 《Maven教程》笔记
  • 《IDEA使用教程》
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档

Jast-zsh

如果你知道你要去哪里,全世界都会给你让路。
首页
  • 《Ambari自定义开发教程》笔记
  • 《CDH教程》笔记
  • 《ClickHouse教程》笔记
  • 《HDFS教程》笔记
  • 《DolphinScheduler教程》笔记
  • 《Hbase教程》笔记
  • 《Iceberg教程》笔记
  • 《Hive教程》笔记
  • 《Flume教程》笔记
  • 《Kafka教程》笔记
  • 《Impala教程》笔记
  • 《Hue教程》笔记
  • 《Spark教程》笔记
  • 《Flink教程》笔记
  • 《Phoenix教程》笔记
  • 《ElasticSearch教程》笔记
  • 《Kylin教程》笔记
  • 《Storm教程》笔记
  • 《Yarn教程》笔记
  • 《Presto教程》笔记
  • 《图数据库教程》笔记
  • 《Kerberos教程》笔记
  • 《Maxwell教程》笔记
  • 《MinIO教程》笔记
  • 《DataX教程》笔记
  • 《Superset教程》笔记
  • 《IOTDB教程》笔记
  • 《大数据相关》笔记
  • 《PaddleNLP教程》笔记
  • 《Nginx教程》笔记
  • 《Java技术文档》
  • 《Maven教程》笔记
  • 《IDEA使用教程》
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • Linux网站汇总
  • Shell使用详解
  • 自动化运维脚本集合
  • 模拟占用磁盘内存CPU
  • Linux释放缓存
  • Linux监控进程磁盘邮件预警
  • 《Nginx教程》笔记
  • Linxu服务器文件双向同步-rsync+sersync
  • Linux文件清空的几种方法
  • Linux日志自动清理方案
  • Linux执行脚本加密
  • Linux安装包制作
  • Crontab详解
  • Linux上传下载百度网盘文件
  • 内网穿透
  • 内网穿透-无需公网服务器
  • 一文搞定Jenkins自动化部署程序
  • Linux配置代理请求
  • Linux监控之夜莺
  • Proxmox安装
  • Proxmox创建CentOS虚拟机
  • Proxmox创建Windows虚拟机
  • Debian系统安装OpenVPN
  • Docker快速部署OpenVPN
  • 用户登录时执行检查脚本
  • 一键配置Linux镜像源
  • RustScan端口扫描
  • 前置机、堡垒机、跳板机区别
  • Linux添加回收站功能
    • 方案设计
    • 编写 trash 脚本
    • 定期清理回收站
    • 总结
  • Linux系统详细信息监控-Grafana+Prometheus
  • 再见XShell:轻量又高性能的SSH工具AI加持快人一步
  • Unbuntu安装deb文件
  • Ubuntu远程连接时分辨率问题
  • Ubuntu中Clash报错
  • Linux可视化监控
  • Vim复制自动缩进问题处理
  • 无所不能的BusyBox:如何用它打造极小的Linux环境
  • 运维
Jast-zsh
2024-08-27
目录

Linux添加回收站功能

# 让 Linux 拥有回收站:轻松找回误删文件的完美解决方案

在 Linux 系统中,使用 rm 命令删除文件后,文件通常会被直接从系统中移除,难以恢复。为了避免误删文件的风险,我们可以通过编写一个 Shell 脚本,在 Linux 上实现类似 Windows 系统的回收站功能。

# 方案设计

实现 Linux 下的回收站功能的基本思路是:将用户“删除”的文件或目录移动到一个指定的目录(如 ~/.trash),而不是直接删除。这样,用户可以在误删后从回收站中找回文件。为防止回收站占用过多磁盘空间,还需要设计一个自动清理过期文件的机制。

# 编写 trash 脚本

接下来,我们编写一个名为 trash 的 Shell 脚本,替代系统默认的 rm 命令。该脚本的作用是将用户想要删除的文件移动到回收站目录,并为文件添加时间戳以防止重名。

#!/bin/bash

# 回收站目录
TRASH_DIR="$HOME/.trash"

# 确保回收站目录存在
if [ ! -d "$TRASH_DIR" ]; then
    mkdir -p "$TRASH_DIR"
fi

# 检查是否提供了文件名参数
if [ $# -eq 0 ]; then
    echo "Usage: $0 file_or_directory"
    exit 1
fi

# 遍历所有传递的参数
for FILE in "$@"; do
    if [ -e "$FILE" ]; then
        TIMESTAMP=$(date +%Y%m%d%H%M%S)
        BASENAME=$(basename "$FILE")
        NEW_NAME="$BASENAME-$TIMESTAMP"
        mv "$FILE" "$TRASH_DIR/$NEW_NAME"
    else
        echo "'$FILE' does not exist!"
    fi
done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

将该脚本保存为 ~/bin/trash.sh,并赋予其可执行权限:

chmod +x ~/bin/trash.sh
1

为了方便使用,可以将系统默认的 rm 命令通过别名替换为 trash 脚本。编辑 ~/.bashrc 或 ~/.zshrc 文件,添加以下内容:

alias rm=~/bin/trash.sh
1

更新终端配置后,用户可以像往常一样使用 rm 命令“删除”文件,例如:

rm myfile.txt
1

此操作将文件 myfile.txt 移动到 ~/.trash 目录,并在文件名后添加时间戳以避免重名冲突。

# 定期清理回收站

为了防止回收站占用过多的磁盘空间,我们可以编写一个脚本定期清理回收站中过期的文件。例如,可以删除超过30天的文件:

#!/bin/bash

# 回收站目录
TRASH_DIR="$HOME/.trash"

# 删除30天前的文件
find "$TRASH_DIR" -type f -mtime +30 -exec rm -f {} \;

echo "Trash cleaned up."
1
2
3
4
5
6
7
8
9

将该脚本保存为 ~/bin/clean_trash.sh,并赋予其可执行权限:

chmod +x ~/bin/clean_trash.sh
1

为了让清理任务自动化执行,可以将此脚本添加到 crontab 中,例如每天运行一次:

(crontab -l ; echo "0 0 * * * ~/bin/clean_trash.sh") | crontab -
1

此 crontab 任务将在每天凌晨0点运行 clean_trash.sh 脚本,自动清理回收站。

# 总结

通过以上步骤,我们在 Linux 系统中实现了一个简单且实用的回收站功能,并设置了自动清理过期文件的机制。这种方法不仅提高了误删文件的恢复能力,还能有效管理磁盘空间。根据实际需求,这一方案还可以进一步扩展和优化,例如增加文件恢复功能或自定义文件的保留时间等。

上次更新: 2024/08/29, 21:00:06
前置机、堡垒机、跳板机区别
Linux系统详细信息监控-Grafana+Prometheus

← 前置机、堡垒机、跳板机区别 Linux系统详细信息监控-Grafana+Prometheus→

最近更新
01
Linux可视化监控
02-26
02
Maven私服搭建
02-26
03
当ElasticSearch时间字段设置多个格式到底是用的哪个?
01-19
更多文章>
Theme by Vdoing | Copyright © 2016-2025 Jast-zsh | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式