【脚本】适用于 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

目录
相关文章
|
30天前
|
Ubuntu Linux Shell
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
(已成功解决)Linux环境报错—bash: wget: command not found;常见Linux发行版本,Linux中yum、rpm、apt-get、wget的区别;Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
249 68
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
|
27天前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
1月前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
73 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
23天前
|
Ubuntu Linux Go
golang编译成Linux可运行文件
本文介绍了如何在 Linux 上编译和运行 Golang 程序,涵盖了本地编译和交叉编译的步骤。通过这些步骤,您可以轻松地将 Golang 程序编译成适合 Linux 平台的可执行文件,并在目标服务器上运行。掌握这些技巧,可以提高开发和部署 Golang 应用的效率。
174 14
|
22天前
|
存储 NoSQL Linux
linux积累-core文件是干啥的
核心文件是Linux系统在程序崩溃时生成的重要调试文件,通过分析核心文件,开发者可以找到程序崩溃的原因并进行调试和修复。本文详细介绍了核心文件的生成、配置、查看和分析方法
72 6
|
24天前
|
存储 NoSQL Linux
linux之core文件如何查看和调试
通过设置和生成 core 文件,可以在程序崩溃时获取详细的调试信息。结合 GDB 等调试工具,可以深入分析 core 文件,找到程序崩溃的具体原因,并进行相应的修复。掌握这些调试技巧,对于提高程序的稳定性和可靠性具有重要意义。
166 6
|
2月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
68 4
|
2月前
|
Linux 开发工具 Perl
在Linux中,有一个文件,如何删除包含“www“字样的字符?
在Linux中,如果你想删除一个文件中包含特定字样(如“www”)的所有字符或行,你可以使用多种文本处理工具来实现。以下是一些常见的方法:
48 5
|
2月前
|
安全 Linux 数据安全/隐私保护
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。本文介绍了使用 `ls -l` 和 `stat` 命令查找文件所有者的基本方法,以及通过文件路径、通配符和结合其他命令的高级技巧。还提供了实际案例分析和注意事项,帮助读者更好地掌握这一操作。
61 6
|
2月前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
199 6