SHELL脚本学习——自动备份

1、 tar 命令

tar {operation} [options…] [file]… :压缩文件
operation:
-c 创建压缩包
-x 提取文件
-t 列出文件
-f 指定文件名
-z 通过gzip指令处理备份文件

tar命令详细介绍见:https://www.runoob.com/linux/linux-comm-tar.html)

例:

$ ls -l
...
drwxrwxr-x  2 ubuntu ubuntu    4096 Jul  1 20:10 archive
drwxrwxr-x  5 ubuntu ubuntu    4096 Jul  1 20:06 build
drwxrwxr-x  4 ubuntu ubuntu    4096 May 22 13:19 src
...

$ tar -zcf ./archive/test.tar.gz ./src ./build

$ ls -l archive
...
-rw-rw-r-- 1 ubuntu ubuntu 252721 Jul  1 20:20 test.tar.gz
2、实现
  1. 将需要备份的目录的绝对路径添加到 $HOME/archive/file_to_backup.txt中。
  2. 脚本从file_to_backup.txt读出路径并以空格分隔,形成路径列表。
  3. 用tar命令将列表中的目录备份到 $HOME/archive目录下。
2.1 创建脚本文件backup.sh,并添加执行权限
$ touch backup.sh
ubuntu@VM-8-6-ubuntu:~$ ls -l backup.sh
-rw-rw-r-- 1 ubuntu ubuntu 0 Jul  1 20:35 backup.sh
ubuntu@VM-8-6-ubuntu:~$ chmod u+x backup.sh
ubuntu@VM-8-6-ubuntu:~$ ls -l backup.sh
-rwxrw-r-- 1 ubuntu ubuntu 0 Jul  1 20:35 backup.sh
2.2 backup.sh实现
#!/usr/bin/bash

file_backup=$HOME/archive/file_to_backup.txt
if [ ! -f $file_backup ] #检查file_to_backup.txt是否存在
then
    echo "$file_backup : No such file "
    exit
fi

#使用gawk将换行符换成空格
file_list=$(gawk 'BEGIN{ORS=" "}
{print $1}
END{print "\n"}
' $file_backup)

for var in $file_list
do
    if [ ! -d $var ] #存在并且是目录
    then
        echo warning: $var not exists or not a directory!
    else
        file_list_new="$file_list_new $var"
    fi
done

if [ -z "$file_list_new" ]
then
    echo No documents need to be backups
    exit
fi

des_file=$HOME/archive/$(date +%Y%m%d).tar.gz

echo "source:"$file_list_new 
echo "destination:"$des_file 

tar -zcf $des_file $file_list_new 

gawk使用方法:https://blog.csdn.net/weixin_37703001/article/details/140106872

2.3 file_to_backup.txt文件内容
$ cat < $HOME/archive/file_to_backup.txt
/home/ubuntu/src
/home/ubuntu/notexists
2.4 运行
$ ./backup.sh
warning: /home/ubuntu/notexists not exists or not a directory!
source: /home/ubuntu/src
destination:/home/ubuntu/archive/20240701.tar.gz
tar: Removing leading `/' from member names

tar有一条警告信息,指出它删除了路径中的斜杠 /,这意味着将绝对路径改成了相对路径。

$ ls -l ./archive
total 348
-rw-rw-r-- 1 ubuntu ubuntu  95491 Jul  1 21:21 20240701.tar.gz
-rw-rw-r-- 1 ubuntu ubuntu     39 Jul  1 21:21 file_to_backup.txt
-rw-rw-r-- 1 ubuntu ubuntu 252721 Jul  1 20:20 test.tar.gz

$ tar -t -f ./archive/20240701.tar.gz
home/ubuntu/src/
home/ubuntu/src/test_tcp/
home/ubuntu/src/test_tcp/main
home/ubuntu/src/test_tcp/client.cpp
home/ubuntu/src/bbb
home/ubuntu/src/test_so.cpp
home/ubuntu/src/kmp/
home/ubuntu/src/kmp/kmp.cpp
home/ubuntu/src/kmp/main
home/ubuntu/src/kmp/CMakeLists.txt
home/ubuntu/src/kmp/main.cpp
home/ubuntu/src/kmp/kmp.h

在archive目录下生成了文件20240701.tar.gz。

3.定时任务

定时执行程序 可使用 at 命令或 cron 时间表。

at 命令和 cron 时间表使用方法请参考 https://blog.csdn.net/weixin_37703001/article/details/139650802

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/763076.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

技术革新:如何用数据中台实现数字化转型

作为程序员&#xff0c;我们总是对技术如何改变企业运作充满好奇。今天&#xff0c;我们将深入探讨森马集团如何利用数据中台技术&#xff0c;实现从传统数据分析到数字化转型的华丽转身。 1. 技术背景&#xff1a;森马集团的数字化挑战 森马集团&#xff0c;一个在服饰行业占…

SpringCloud_Ribbon负载均衡

概述 SpringCloud底层其实是利用了一个名为Ribbon的组件&#xff0c;来实现负载均衡功能的。 源码 LoadBalancerInterceptor 其中含有intercept方法&#xff0c;拦截用户的HttpRequest请求&#xff1a; request.getURI() 获取请求uri&#xff0c;即http://userservice/use…

解析QAnything启动命令过程

一.启动命令过程日志 启动命令bash ./run.sh -c local -i 0 -b hf -m Qwen-1_8B-Chat -t qwen-7b-chat。输入日志如下所示&#xff1a; rootMM-202203161213:/mnt/l/20230918_RAG方向/QAnything# bash ./run.sh -c local -i 0 -b hf -m Qwen-1_8B-Chat -t qwen-7b-chat From …

Spring Boot如何集成Spring Security?

&#x1f345; 作者简介&#xff1a;哪吒&#xff0c;CSDN2021博客之星亚军&#x1f3c6;、新星计划导师✌、博客专家&#x1f4aa; &#x1f345; 哪吒多年工作总结&#xff1a;Java学习路线总结&#xff0c;搬砖工逆袭Java架构师 &#x1f345; 技术交流&#xff1a;定期更新…

1-3.文本数据建模流程范例

文章最前&#xff1a; 我是Octopus&#xff0c;这个名字来源于我的中文名–章鱼&#xff1b;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github &#xff1b;这博客是记录我学习的点点滴滴&#xff0c;如果您对 Python、Java、AI、算法有兴趣&#xff0c;可以关注我的…

算法笔记:模拟过程(螺旋遍历矩阵)

1 模拟过程 “模拟过程题”通常指的是那些要求编程者通过编写代码来“模拟”或重现某个过程、系统或规则的题目。这类题目往往不涉及复杂的数据结构或高级算法&#xff0c;而是侧重于对给定规则的精确执行和逻辑的清晰表达。 其中螺旋遍历矩阵的题目就是一类典型的模拟过程题…

代码随想录-Day44

322. 零钱兑换 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数…

ARCGIS python 裁剪栅格函数 arcpy.management.Clip

ARCGIS python 裁剪栅格函数 arcpy.management.Clip 1 功能 裁剪掉栅格数据集、镶嵌数据集或图像服务图层的一部分。 2 使用情况 基于模板范围提取部分栅格数据集&#xff0c;输出与模板范围相交的所有像素使用以 x 和 y 坐标的最小值和最大值确定的包络矩形或使用输出范围文…

商汤上海AI实验室联合发布:自动驾驶全栈式高精度标定工具箱(含车、IMU、相机、激光雷达等的标定)

前言 在自动驾驶技术飞速发展的今天&#xff0c;传感器的精确标定对于确保系统性能至关重要。SensorsCalibration&#xff0c;一个专为自动驾驶车辆设计的标定工具箱&#xff0c;提供了一套全面的解决方案&#xff0c;用于校准包括IMU、激光雷达、摄像头和雷达在内的多种传感器…

Evented PLEG: iSulad 稳态 CPU 利用率降低30%的关键特性

背景 容器技术在不断发展的过程中&#xff0c;已被广泛应用于多种场景。OpenAtom openEuler&#xff08;简称"openEuler"&#xff09; 社区容器引擎项目 iSulad[1]面向 CT、IT 领域的不同需求而生&#xff0c;它具有轻量级、高性能的特点&#xff0c;可以在资源受限…

vue3引入本地静态资源图片

一、单张图片引入 import imgXX from /assets/images/xx.png二、多张图片引入 说明&#xff1a;import.meta.url 是一个 ESM 的原生功能&#xff0c;会暴露当前模块的 URL。将它与原生的 URL 构造器 组合使用 注意&#xff1a;填写自己项目图片存放的路径 /** vite的特殊性…

技术干货丨基于MotionView的虚拟路面疲劳分析

虚拟路面VPG&#xff08;Virtual Proving Ground&#xff09;现在正被广泛应用于汽车的疲劳耐久分析中&#xff0c;相较于传统的道路载荷谱数据采集的疲劳计算方法&#xff0c;虚拟路面VPG技术可以极大地节省载荷谱的获取时间并降低测试成本。 本文将给大家介绍汽车悬挂系统中的…

一文讲解Docker入门到精通

一、引入 1、什么是虚拟化 在计算机中&#xff0c;虚拟化&#xff08;英语&#xff1a;Virtualization&#xff09;是一种资源管理技术&#xff0c;它允许在一台物理机上创建多个独立的虚拟环境&#xff0c;这些环境被称为虚拟机&#xff08;VM&#xff09;。每个虚拟机都可以…

无锁编程——从CPU缓存一致性讲到内存模型(1)

一.前言 1.什么是有锁编程&#xff0c;什么是无锁编程&#xff1f; 在编程中&#xff0c;特别是在并发编程的上下文中&#xff0c;“无锁”和“有锁”是描述线程同步和资源访问控制的两种不同策略。有锁&#xff08;Locked&#xff09;: 有锁编程是指使用锁&#xff08;例如互…

基于JSP技术的校园餐厅管理系统

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果您对校园餐厅管理系统感兴趣或有相关需求&#xff0c;欢迎随时联系我。我的联系方式在文末&#xff0c;期待与您交流&#xff01; 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#x…

MySQL 8 命令安装卸载教程

一、下载MySQL8 下载连接 MySQL :: Download MySQL Community Server 我下载的是当前最新版8.4 二、安装 1.解压 解压到需要安装的位置&#xff0c;例如我的位置&#xff1a; 2.创建配置文件 新建文本文档&#xff0c;复制下面配置文件&#xff08;注意修改路经&#xff09;…

Cesium大屏-vue3注册全局组件

1.需求 说明&#xff1a;产品经理要求开发人员在地图大屏上面随意放置组件&#xff0c;并且需要通过数据库更改其组件大小&#xff0c;位置等&#xff1b;适用于大屏组件中场站视角、任意位置标题等。 2.实现 2.1GlobalComponents.vue 说明&#xff1a;containerList可以通…

javascript 常见设计模式

什么是设计模式? 在软件开发中&#xff0c;设计模式是解决特定问题的经验总结和可复用的解决方案。设计模式可以提高代码的复用性、可维护性和可读性&#xff0c;是提高开发效率的重要手段。 单例模式 1.概念 单例模式 &#xff08;Singleton Pattern&#xff09;&#xf…

ssm校园二手交易平台小程序

设计技术&#xff1a; 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringMybatisSpringMvc微信小程序 工具&#xff1a;IDEA、Maven、Navicat 主要功能&#xff1a; (a) 管理员&#xff1b;管理员进入系统主要功能包括首页&#xff0c;个人中心&…

RedHat9 | 内部YUM本地源服务器搭建

服务器参数 标识公司内部YUM服务器主机名yum-server网络信息192.168.37.1/24网络属性静态地址主要操作用户root 一、基础环境信息配置 修改主机名 [rootyum-server ~]# hostnamectl hostname yum-server添加网络信息 [rootyum-server ~]# nmcli connection modify ens160 …
最新文章