当前位置: 首页 > news >正文

【教程】Linux使用git自动备份和使用支持文件恢复的rm命令

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn]

背景介绍

        首先非常不幸地告诉你:Linux 系统的标准 rm 命令不支持文件恢复功能。一旦使用 rm 删除了文件或目录,它们就会从文件系统中永久删除,除非你使用专门的文件恢复工具尝试恢复这些文件。

        不过,为了提供文件恢复功能,存在一些替代方案,其中 trash-cli 是一个非常流行的选择,它为命令行环境提供了回收站功能。

        很心疼,我的工程又一次被我误删了。

方案介绍

使用git自动备份

        这个方法大家都知道,每次记得提交一下,如果误删除了可以回退,只是每次要提交很麻烦。

参考的自动提交脚本auto_git.sh

#!/bin/bash# 指定git仓库的目录
repo_dir="/mnt/disk/test"
# 指定日志文件路径
log_file="/mnt/disk/test/git_backup.log"# 记录操作开始的时间
echo "Auto Backup Start at $(date)" >> "$log_file"# 检查是否为git仓库,如果不是则初始化
if [ ! -d "$repo_dir/.git" ]; thenecho "Initializing git repository in $repo_dir" >> "$log_file"git -C "$repo_dir" init >> "$log_file" 2>&1
fi# 执行git操作
cd "$repo_dir" || exit
git add .
git commit -m "Auto Backup on $(date +'%Y-%m-%d %H:%M:%S')"
# git push origin main >> "$log_file" 2>&1# 记录操作结束的时间
echo "Backup completed at $(date)" >> "$log_file"

加入crontab:

crontab -e

添加内容:*/10 * * * * /mnt/disk/test/auto_git.sh

备份效果:

使用trash-cli代替rm

   trash-cli 提供了一系列命令行工具,模拟了图形界面下回收站的行为,允许用户将文件“删除”到回收站,从而可以在需要时恢复这些文件。如果你想要一个支持文件恢复的 rm 指令,可以考虑将 trash-cli 集成到你的工作流程中。

安装trash-cli

在Ubuntu系统上,你可以通过以下命令安装trash-cli

sudo apt updatesudo apt install trash-cli

使用trash-cli的基本命令

官方文档:https://github.com/andreafrancia/trash-cli/blob/master/README_zh-CN.rst

trash-cli 提供以下命令:

trash-put           把文件或目录移动到回收站
trash-empty         清空回收站
trash-list          列出回收站文件
trash-restore       恢复回收站文件
trash-rm            删除回收站文件
  • 删除文件或目录: 使用trash-put命令将文件或目录放入垃圾箱。例如,要删除名为example.txt的文件,你可以使用:

    trash-put example.txt
  • 列出垃圾箱中的内容: 使用trash-list命令查看垃圾箱中的文件。这将显示垃圾箱中所有文件的列表,包括删除日期。

    trash-list

  • 恢复垃圾箱中的文件: 使用trash-restore命令从垃圾箱中恢复文件。这个命令会启动一个交互式界面,让你选择要恢复的文件。

    trash-restore

  • 清空垃圾箱: 使用trash-empty命令清空垃圾箱中的所有内容。你也可以指定保留最近N天内删除的文件不被删除,例如,保留最近7天内删除的文件:

    trash-empty 7

    不带参数运行trash-empty将清空垃圾箱中的所有文件。

  • 删除特定文件: 如果你知道要删除的文件的确切名称,可以使用trash-rm命令从垃圾箱中删除特定文件。例如,删除垃圾箱中所有名为example.txt的文件:

    trash-rm example.txt

    注意事项

  • 使用trash-cli时,删除的文件会被移动到一个专门的目录(通常是~/.local/share/Trash),而不是被立即从文件系统中永久删除。
  • trash-cli提供了一种安全删除文件的方式,因为你有机会恢复错误删除的文件。
  • 确保定期检查和清理垃圾箱,以避免它占用过多的磁盘空间。

创建别名以替代 rm

        如果你习惯于使用 rm 命令,并且想要一个不那么永久的删除操作,可以通过在你的 shell 配置文件中(如 .bashrc.zshrc)设置别名来实现。通过设置别名,当你输入 rm 时,实际上可以调用 trash-put

        在你的 .bashrc.zshrc 文件中添加以下行:

alias rm='trash-put'

        保存文件并重新加载配置(通过执行 source ~/.bashrcsource ~/.zshrc),之后,当你在终端中使用 rm 命令时,实际上会使用 trash-put,这样删除的文件就可以恢复了。

附:使用文件恢复工具

有多种Linux文件恢复工具可用来尝试恢复删除的文件,例如:

  • TestDisk:一个强大的恢复工具,可以恢复丢失的分区和非常有效地恢复删除的文件。
  • PhotoRec:由TestDisk开发者创建,专注于恢复图像、视频、文档等文件类型,从磁盘、相机和内存卡中。
  • extundelete:对于使用Ext3或Ext4文件系统的磁盘,这个工具可以尝试恢复删除的文件。
  • foremost:是一个基于文件头和尾信息恢复文件的工具,可以工作在各种文件系统上。

(基本上用处不大的)

相关文章:

【教程】Linux使用git自动备份和使用支持文件恢复的rm命令

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 背景介绍 首先非常不幸地告诉你:Linux 系统的标准 rm 命令不支持文件恢复功能。一旦使用 rm 删除了文件或目录,它们就会从文件系统中永久删除,除非你使用专门的文件恢复工具尝试…...

记录使用M1 Mac开发LVGL嵌入式项目

技术流 使用Gui Guider进行UI设计,生成lvgl code将lvgl code移植到esp32s3开发板 Gui Guider的安装 安装下面流程一步一步进行 LVGL的移植 硬件:esp32-8048s043开发板 开发环境:PlatformIO M1芯片安装ESP32驱动 从https://www.wch.cn…...

【SpringBoot】JWT令牌

📝个人主页:五敷有你 🔥系列专栏:SpringBoot ⛺️稳重求进,晒太阳 什么是JWT JWT简称JSON Web Token,也就是通过JSON形式作为Web应用的令牌,用于各方面之间安全的将信息作为JSON对象传输…...

Python爬虫 Beautiful Soup库详解#4

爬虫专栏:http://t.csdnimg.cn/WfCSx 使用 Beautiful Soup 前面介绍了正则表达式的相关用法,但是一旦正则表达式写的有问题,得到的可能就不是我们想要的结果了。而且对于一个网页来说,都有一定的特殊结构和层级关系,…...

Tkinter教程21:Listbox列表框+OptionMenu选项菜单+Combobox下拉列表框控件的使用+绑定事件

------------★Tkinter系列教程★------------ Tkinter教程21:Listbox列表框OptionMenu选项菜单Combobox下拉列表框控件的使用绑定事件 Tkinter教程20:treeview树视图组件,表格数据的插入与表头排序 Python教程57:tkinter中如何…...

Django中的SQL注入攻击防御策略

Django中的SQL注入攻击防御策略 SQL注入是一种常见的网络安全威胁,可以导致数据库被非法访问和数据泄露。本文将介绍在Django框架中防止SQL注入攻击的关键方法,包括使用参数化查询、使用ORM、进行输入验证和使用安全的编码实践。 SQL注入是一种利用应用程…...

ORM模型类

模型 创建两个表 创建模型类 from django.db import models# Create your models here. class BookInfo(models.Model):name models.CharField(max_length10, uniqueTrue) # 书名pub_date models.DateField(nullTrue) # 发布时间read_count models.IntegerField(default…...

Java强训day14(选择题编程题)

选择题 编程题 题目1 import java.util.Scanner;public class Main {public static void main(String[] args) {//读入年月日(字符串形式读入)Scanner sc new Scanner(System.in);String s sc.nextLine();String[] ss s.split(" ");i…...

Redis核心技术与实战【学习笔记】 - 31.番外篇:Redis客户端如何与服务器端交换命令和数据

简述 Redis 使用 RESP 协议(Redis Serialzation Protocol)协议定义了客户端和服务器端交互的命令、数据的编码格式。在 Redis 2.0 版本中,RESP 协议正式称为客户端和服务器端的标准通信协议。从 Redis 2.0 到 Redis 5.0 ,RESP 协…...

电缆线的阻抗50Ω,真正含义是什么?

当我们提到电缆线的阻抗时,它到底是什么意思?RG58电缆通常指的是50Ω的电缆线。它的真正含义是什么?假如取一段3英尺(0.9144米)长的RG58电缆线,并且在前端测量信号路径与返回路径之间的阻抗。那么测得的阻抗是多少?当然…...

校园团餐SAAS系统源码

## 项目介绍 校园团餐SAAS系统,是全新推出的一款轻量级、高性能、前后端分离的团餐系统,支持微信小程序 。 技术特点 > * 前后端完全分离 (互不依赖 开发效率高) > * 采用PHP8 (强类型严格模式) > * ThinkPHP8.0(轻量级PHP开发框…...

图数据库neo4j入门

neo4j 一、安装二、简单操作<一>、创建<二>、查询<三>、关系<四>、修改<五>、删除 三、常见报错<一>、默认的数据库密码是neo4j,打开浏览器http://localhost:7474登录不上,报错: Neo.ClientError.Security.Unauthorized: The client is un…...

Multisim14.0仿真(五十五)汽车转向灯设计

一、功能描述&#xff1a; 左转向&#xff1a;左侧指示灯循环依次闪亮&#xff1b; 右转向&#xff1a;右侧指示灯循环依次闪亮&#xff1b; 刹车&#xff1a; 所有灯常亮&#xff1b; 正常&#xff1a; 所有灯熄灭。 二、主要芯片&#xff1a; 74LS161D 74LS04D 74…...

2402C++,C++的反向代理

原文 cinatra支持反向代理很简单,5行代码就可以了.先看一个简单的示例: #include "cinatra/coro_http_reverse_proxy.hpp" using namespace cinatra; int main() {reverse_proxy proxy_rr(10, 8091);proxy_rr.add_dest_host("127.0.0.1:9001");proxy_rr.a…...

[职场] 服务行业个人简历 #笔记#笔记

服务行业个人简历 服务员个人简历范文1 姓名: XXX国籍:中国 目前所在地:天河区民族:汉族 户口所在地:阳江身材: 160cm43kg 婚姻状况:未婚年龄: 21岁 培训认证:诚信徽章: 求职意向及工作经历 人才类型:普通求职 应聘职位: 工作年限:职称:初级 求职类型:全职可到职日期:随时 月薪…...

代码随想录算法训练营|day30

第七章 回溯算法 332.重新安排行程51.N皇后37.解数独代码随想录文章详解 332.重新安排行程 (1)参考 创建map存储src&#xff0c;[]dest映射关系&#xff0c;并对[]dest排序 每次取map中第一个dest访问&#xff0c;将其作为新的src&#xff0c;每访问一条src->dest&#xff…...

PHPExcel导出excel

PHPExcel下载地址 https://gitee.com/mirrors/phpexcelhttps://github.com/PHPOffice/PHPExcel 下载后目录结构 需要的文件如下图所示 将上面的PHPExcel文件夹和PHPExcel.php复制到你需要的地方 这是一个简单的示例代码 <?php$dir dirname(__FILE__); //require_once …...

ubuntu系统下c++ cmakelist vscode debug(带传参的debug)的详细示例

c和cmake的debug&#xff0c;网上很多都需要配置launch.json&#xff0c;cpp.json啥的&#xff0c;记不住也太复杂了&#xff0c;我这里使用cmake插件带有的设置&#xff0c;各位可以看一看啊✌(不知不觉&#xff0c;竟然了解了vscode中配置文件的生效逻辑&#x1f923;) 克隆…...

聊聊JIT优化技术

&#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是小徐&#x1f947;☁️博客首页&#xff1a;CSDN主页小徐的博客&#x1f304;每日一句&#xff1a;好学而不勤非真好学者 &#x1f4dc; 欢迎大家关注&#xff01; ❤️ 我们知道&#xff0c;想要把高级语言转变成计算…...

LabVIEW动平衡测试与振动分析系统

LabVIEW动平衡测试与振动分析系统 介绍了利用LabVIEW软件和虚拟仪器技术开发一个动平衡测试与振动分析系统。该系统旨在提高旋转机械设备的测试精度和可靠性&#xff0c;通过精确测量和分析设备的振动数据&#xff0c;以识别和校正不平衡问题&#xff0c;从而保证机械设备的高…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...