【脚本】适用于 linux 环境的文件版本管理小脚本

简介: 【脚本】适用于 linux 环境的文件版本管理小脚本

需求提出



在公司使用svn、perforce等版本管理工具。对于多人共享的文件, 我有以下需求:


  •    我不想频繁check in或submit改动到版本库,防止影响别人工作;


  •    但我每修改一点都要及时备份,防止误删、未保存等误操作;


  •    希望能够把改动的文件备份到较为安全的路径,至少不要在改动文件当前目录;


  •    希望能够有多个备份进行容灾;


  •    备份后的文件希望有时间戳展示改动时间,希望有相关改动描述。





脚本特性


为此,分享一个我多年前写的文件备份小脚本,除满足以上需求外,还支持以下feature:


  •    支持文件夹内容备份


  •    备份文件路径在源路径前添加备份文件夹的路径,比如源路径为/home/file1.c,备份文件夹路径为/backup,则备份后的文件路径在/backup/home/file1.c


  •    backup.log内存储备份信息,需要手动提供description,自动添加时间戳及文件的源路径及备份路径,在vim内可g + f直达。


  •    考虑到个人手动备份次数不会太多,所有备份共享同一个backup.log


  •    backup.log多地保存,并ln软链到备份文件所在目录





脚本


脚本名backup.sh,为便于使用请在~/.bashrc中添加 alias backup='~/script/backup.sh'



#! /bin/sh
# usage: backup file "your description"
# script_name: backup.sh
# alias backup '~/script/backup.sh'
tar=$1
description=$2
src=$(pwd)
dst1=~/backup
dst2=/proj/muhe/backup
timestamp=$(date +%Y-%m-%d_%H:%M:%S)
timestamp2=$(date +%Y%m%d%H%M%S)
tarbak=$tar.$timestamp2
genlog() {
  log=$1
  echo "------------------------------------------------------" >> $log
  echo "Description: $description" >> $log
  echo "Time Stamp : $timestamp  " >> $log
  echo "From       : $src/$tar   " >> $log
  echo "To         : $dst/$tarbak" >> $log
  echo "                         " >> $log
}
backup2path() {
  dst=$1$src
  if [ ! -d $dst ]; then
    mkdir -p $dst
  fi
  cp -rf $src/$tar $dst/$tarbak
  genlog $dst/$tar.log
  genlog $1/backup.log
}
main() {
  backup2path $dst1
  backup2path $dst2
  if [ ! -f backup.log ]; then
    ln -s $dst1/backup.log backup.log
  fi
}
main

以上脚本中备份到两地,如需更多备份,可在dst2后追加dstN,并在main函数中添加backup2path $dstN

目录
相关文章
|
8月前
|
存储 Linux 开发工具
Linux环境下使用Buildroot配置软件包
使用Buildroot可以大大简化嵌入式Linux系统的开发和维护工作,但它需要对Linux系统和交叉编译有深入的理解。通过上述步骤,可以有效地配置和定制软件包,为特定的嵌入式应用构建高效、稳定的系统。
908 11
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
865 3
Linux系统初始化脚本
|
9月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
797 9
|
9月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
819 2
|
10月前
|
存储 监控 Linux
Linux环境锁定关键文件防止误删操作流程。
总结以上内容,在Linux环境下锁定重要文档避免误删涉及到多种技术手段与策略组合运作, 包括但不限于利用chatter指挥官固化文档状态至只读模式、运作ACL精准调整访问权利列表、编排自动化流程简
488 20
|
10月前
|
Linux
Linux环境下的UDEV机制及其与守护进程的关联
实际使用时管理员需要熟悉编写合适udev rules去满足特殊需求;同时也需要注意避免编写过度复杂导致无法预料结果rules.UDEVD虽然稳健但错误配置可能导致无法预料问题因此需谨慎处理相关配置工作.
365 16
|
10月前
|
存储 Linux
Linux环境下删除大文件后磁盘空间未释放问题诊断流程。
以上诊断流程涉及Linux底层机制与高级管理技能结合之处,并需要管理员根据实际环境灵活调整诊断策略与解决方案。
705 8
|
10月前
|
XML 缓存 Linux
在Linux环境下解决Visual Studio Code字体显示异常和字体替换方法。
解决Linux下VS Code字体显示异常,需要对Linux字体渲染机制有所理解,并对VS Code的配置选项进行合理设置。替换字体时则要通过系统字体配置或VS Code设置来完成。通过上述方法,可以有效地解决字体显示问题,从而提升代码编辑的视觉体验。
1511 21
|
10月前
|
Ubuntu 安全 Linux
Ubuntu 24.10 发行版登场:Linux 6.11 内核、GNOME 47 桌面环境
Ubuntu 24.10 还带来了 GNOME 47,增强了性能和稳定性,并引入了新功能。此版本的 Ubuntu 还默认在采用 Nvidia 显卡的硬件上切换到 Wayland,并在支持的硬件上默认使用开源的 Nvidia 560 内核模块。 另外需要注意的是,Ubuntu 24.10 是稳定版本,但作为非 LTS 版本,仅支持 9 个月。